2012-12-03 20 views
6
终端

运行正如你所知道的TextMate第2版是在路上和当前的开发版本是非常有前途的:https://github.com/textmate/textmate/blob/master/README.md怎样才能在TextMate2发送所选文本(或线)和r上

在我来说,我我在终端(MacOSX Mountain Lion)中使用R,并使用TextMate2开发我的代码。与上一版本的TextMate的(1.5.11)我用下面的技巧来选定的文本或行发送到我的终端窗口:

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

这招完全为我工作,但我想不出如何获得与TextMate2类似的行为。

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

回答

1

有点间接的答案:我在Textmate 2中使用R包(它也在Textmate 1中工作)。只需选择你想要运行的行和“发送选择到/ R应用程序”(我把它绑定到命令-R,但我不知道它是否是原始绑定)

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

这不完全“发送到终端”,但仍然有效

+0

谢谢,但我真的很喜欢直接使用MacOSX终端 – bhaibeka

2

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

#!/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" & 

见下面的屏幕。

code and options for the new bundle 唯一的问题是,当您选择一个文本块时,光标会跳到文档的第一行,这是一个非常令人烦恼的行为。更改线条“输入”'为‘选择’母鹿也不能解决问题。

有什么想法?

0

我得到了它与bhaibeka的回答了几个变化工作。显然$ TM_LINE_NUMBER是空的,这使光标跳转到文档的第一行。通过摆脱的最后一行,它解决了问题的一部分。

#!/bin/bash 
[[ -f "${TM_SUPPORT_PATH}/lib/bash_init.sh" ]] && . "${TM_SUPPORT_PATH}/lib/bash_init.sh" 
rawText="`cat`" 

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

另一个问题是如何将光标移动到选择的结尾。我做了它通过在选择的末尾插入'空'输出来工作(在右侧面板上:输出:“输入后输入”和格式:“文本”)。可能这不是最优雅的方式来做到这一点,但它的工作原理。

2

这适用于我,它正确地进行到选择结束。 我刚刚在前面的答案中加入了osascript部分,并将其放在由Hans-JörgBibiko编写的原始R包中的代码中。 将“范围选择器”设置为“source.r”并将“输出”设置为“丢弃”。 将“输入”设置为“行”,并且它做我需要的:如果没有选择任何内容,则发送行,否则发送选择。

编辑:它适用于选择完美,但不符合线条。当你不选择文本时,它只是重新运行文件顶部的所有内容。

edit2:解决了,我给Hans-JörgBibiko写信,他指示我选择“Input”。

#!/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