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

时间:2012-12-03 14:05:10

标签: r terminal textmate2

如您所知,TextMate的第2版即将开始,当前的开发版本非常有前景:https://github.com/textmate/textmate/blob/master/README.md

在我的情况下,我在终端(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获得类似的行为。

有什么想法吗?我事先感谢你的宝贵帮助。

4 个答案:

答案 0 :(得分:3)

这适合我,它正确地进入选择的最后。 我刚刚在上一个答案中添加了osascript部分,并将其放入Hans-JörgBibiko编写的原始R包中的代码中。 将“范围选择器”设置为“source.r”并将“output”设置为“discard”。 将“输入”设置为“行”并执行我需要的操作:如果未选择任何内容,则发送行,否则发送选择。

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

edit2:解决了,我写信给Hans-JörgBibiko并指出了我的“输入”选择。

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

答案 1 :(得分:2)

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

#!/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 唯一的问题是当你选择一大块文本时,光标会跳到文档的第一行,这是一种非常恼人的行为。将“输入”从“行”更改为“选择”并不能解决问题。

有什么想法吗?

答案 2 :(得分:1)

一点间接的答案:我在Textmate 2中使用R包(它也在Textmate 1中使用)。只需选择你想要运行的行和“将选择发送到/ R App”(我把它绑定到命令-R但是我不确定它是否是原始绑定)

首次打开R app并执行代码。随后的时间它只是粘贴代码并运行它。

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

答案 3 :(得分: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

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