首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将TextMate2中的选定文本(或一行)发送到终端上运行的R

如何将TextMate2中的选定文本(或一行)发送到终端上运行的R
EN

Stack Overflow用户
提问于 2012-12-03 22:05:10
回答 4查看 954关注 0票数 6

如您所知,TextMate的第2版正在开发中,当前的开发版本非常有前途:https://github.com/textmate/textmate/blob/master/README.md

在我的例子中,我在终端(MacOSX Mountain Lion)中使用R,并且我使用TextMate2开发我的代码。在以前版本的TextMate (1.5.11)中,我使用以下技巧将选定的文本或行发送到我的终端窗口:

-> See How can I send selected text (or a line) in TextMate to R running on Terminal

这个技巧对我来说非常有效,但我想不出如何在TextMate2上获得类似的行为。

有什么想法吗?我要提前感谢您的宝贵帮助。

EN

回答 4

Stack Overflow用户

发布于 2012-12-24 22:11:43

实际上,基于之前的答案(How can I send selected text (or a line) in TextMate to R running on Terminal),我使用以下代码在TextMate 2中创建了自己的包:

代码语言:javascript
复制
#!/bin/bash

source "$TM_SUPPORT_PATH/lib/bash_init.sh" # might not be necessary

# input is selection or document
rawText="$(cat | sed 's/ / /g;')" 

osascript  -e 'on run(theCode)' \
           -e '  tell application "Terminal"' \
           -e '    do script theCode in window 1' \
           -e '  end tell' \
           -e 'end run' -- "$rawText"

open "txmt://open?line=$(($TM_LINE_NUMBER+1))&column=1000000" &

请看下面的截屏。

唯一的问题是,当你选择一个文本块时,光标会跳到文档的第一行,这是一种非常恼人的行为。将‘Input’从'Line‘改为'Selection’并不能解决问题。

有什么想法吗?

票数 3
EN

Stack Overflow用户

发布于 2014-04-05 00:38:29

这对我来说很有效,并且它正确地转到了选择的末尾。我只是在前面的答案中添加了osascript部分,并将其放入由Hans-Jörg Bibiko编写的原始R包中的代码中。将"scope selector“设置为”Soure.r“,将"output”设置为"discard“。将"Input“设置为" line”,它会做我需要做的事情:如果没有选择任何内容,则发送行,否则发送选择。

编辑:它可以完美地处理选区,但不能处理线条。如果不选择文本,它只会从文件顶部重新运行所有内容

edit2:解决了,我写信给Hans-Jörg Bibiko,他告诉我“输入”选项。

代码语言:javascript
复制
#!/usr/bin/env bash

# input is selection or document
rawText="$(cat | sed 's/ / /g;')"

curDir=''
if [[ ${#TM_DIRECTORY} -gt 0 ]]; then
    curDir="$TM_DIRECTORY"
fi

osascript  -e 'on run(theCode)' \
           -e '  tell application "Terminal"' \
           -e '    do script theCode in window 1' \
           -e '  end tell' \
           -e 'end run' -- "$rawText"

if [ "$TM_LINE_NUMBER" != "" ]; then
    "$TM_MATE" -l "$(($TM_LINE_NUMBER+1)):1000000"
elif [[ $TM_SELECTION =~ [1-9][0-9]*:?[0-9]*-([1-9][0-9]*):?[0-9]* ]]; then
    # Regular Selection
    "$TM_MATE" -l "$((${BASH_REMATCH[1]}+1)):1000000"
elif [[ $TM_SELECTION =~ [1-9][0-9]*:?[0-9]*x([1-9][0-9]*):?[0-9]* ]]; then 
    # Block (option) selection
    "$TM_MATE" -l "$((${BASH_REMATCH[1]}+1)):1000000"
else 
    "$TM_MATE"
fi
票数 3
EN

Stack Overflow用户

发布于 2012-12-17 23:38:15

一个间接的回答:我在Textmate 2中使用了R包(在Textmate 1中也是如此)。只需选择您想要运行的行,然后"Send selection to /R App“(我已经将其绑定到command-R,但我不确定它是否是原始绑定)

第一次打开R应用程序并执行代码。随后,它只是粘贴代码并运行它。

这不是确切的“发送到终端”,但仍然有效

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13684920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档