6

ご存知のように、TextMateのバージョン2が進行中であり、現在の開発バージョンは非常に有望です:https ://github.com/textmate/textmate/blob/master/README.md

私の場合、ターミナル(MacOSX Mountain Lion)でRを使用しており、TextMate2を使用してコードを開発しています。以前のバージョンのTextMate(1.5.11)では、次のトリックを使用して、選択したテキストまたは行をターミナルウィンドウに送信しました。

->ターミナルで実行されているRにTextMateで選択したテキスト(または行)を送信する方法を参照してください

このトリックは私にとっては完璧に機能しましたが、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 に独自のバンドルを作成しました。

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

少し間接的な答え: Textmate 2 で R バンドルを使用しています (これは Textmate 1 でも機能しました)。実行したい行を選択し、「選択内容を / R アプリに送信」するだけです (command-R にバインドしていますが、元のバインドかどうかはわかりません)。

初めて R アプリを開いてコードを実行します。その後は、コードを貼り付けて実行するだけです。

正確には「端末に送信」ではありませんが、それでも機能します

于 2012-12-17T15:38:14.507 に答える
0

私はバイベカの答えにいくつかの変更を加えて動作させました。どうやら $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

もう 1 つの問題は、カーソルを選択範囲の最後に移動する方法です。選択の最後に「空の」出力を挿入することで機能させました(右側のパネル:出力:「入力後に挿入」およびフォーマット:「テキスト」)。おそらくこれは最もエレガントな方法ではありませんが、機能します。

于 2014-01-09T12:36:58.700 に答える