6

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

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

-> 请参阅如何将 TextMate 中的选定文本(或一行)发送到终端上运行的 R

这个技巧对我来说非常有效,但我无法弄清楚如何使用 TextMate2 获得类似的行为。

任何想法?我提前感谢您的宝贵帮助。

4

4 回答 4

3

这对我有用,它正确地进入了选择的结尾。我刚刚在上一个答案中添加了 osascript 部分,并将其放入由 Hans-Jörg Bibiko 编写的原始 R 包中的代码中。将“范围选择器”设置为“source.r”,将“输出”设置为“丢弃”。将“输入”设置为“行”,它会做我需要的事情:如果没有选择任何内容,则发送该行,否则发送选择。

编辑:它适用于选择,但不适用于线条。当您不选择文本时,它只会从文件顶部重新运行所有内容

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

#!/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
于 2014-04-04T16:38:29.170 回答
3

实际上基于先前的答案(如何将 TextMate 中的选定文本(或一行)发送到终端上运行的 R),我使用以下代码在 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" &

请参阅下面的屏幕截图。

新捆绑包的代码和选项 唯一的问题是,当您选择一段文本时,光标会跳到文档的第一行,这是一种非常烦人的行为。将“输入”从“行”更改为“选择”并不能解决问题。

有什么想法吗?

于 2012-12-24T14:11:42.840 回答
1

A bit of an indirect answer : I use the R bundle in Textmate 2 (which also worked in Textmate 1). Just select the lines you want to run and "Send selection to / R App" ( I have it binded to command-R but I'm not sure if it's the original binding)

First time it opens the R app and execute code. Subsequent times it just pastes the code and run it.

It's not exactly "send to terminal" but still works

于 2012-12-17T15:38:14.507 回答
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

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

于 2014-01-09T12:36:58.700 回答