2012-12-03 10 views
6

Wie Sie 2 von Textmate ist auf dem Weg und die aktuellen Entwicklungsversion ist sehr vielversprechend wissen Version senden: Ich https://github.com/textmate/textmate/blob/master/README.mdWie kann ich ausgewählten Text (oder eine Zeile) in TextMate2 bis R lief auf dem Terminal

In meinem Fall verwende R in Terminal (MacOSX Mountain Lion) und entwickle meinen Code mit TextMate2. Mit der früheren Version von Textmate (1.5.11) habe ich den folgenden Trick ausgewählten Text oder Linien zu meinen Terminal-Fenstern senden:

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

Dieser Trick funktionierte perfekt für mich sehen, aber ich kann nicht herausfinden wie man ein ähnliches Verhalten mit TextMate2 bekommt.

Irgendeine Idee? Ich danke Ihnen im Voraus für Ihre wertvolle Hilfe.

Antwort

1

Ein bisschen eine indirekte Antwort: Ich verwende das R-Bündel in Textmate 2 (was auch in Textmate 1 funktionierte). Wählen Sie einfach die Zeilen aus, die Sie ausführen möchten, und "Auswahl an/R App senden" (Ich habe es an Befehl-R gebunden, aber ich bin mir nicht sicher, ob es die Originalbindung ist)

Zum ersten Mal öffnet es die R-App und Code ausführen. Nachfolgende Male fügt es einfach den Code ein und führt ihn aus.

Es ist nicht genau "an Klemme senden", aber immer noch funktioniert

+0

danke, aber ich mag es wirklich, direkt mit dem MacOSX-Terminal zu arbeiten – bhaibeka

2

Eigentlich basiert auf einer früheren Antwort (How can I send selected text (or a line) in TextMate to R running on Terminal), habe ich mein eigenes Bundle in Textmate 2 mit dem folgenden Code:

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

See der Screenchot unten.

code and options for the new bundle Das einzige Problem ist, dass wenn Sie einen Textblock auswählen, springt der Cursor in die erste Zeile des Dokuments, was ein sehr irritierendes Verhalten ist. Ändern ‚Input“ von ‚Line‘ auf ‚Auswahl‘ doe das Problem nicht lösen.

Irgendwelche Gedanken?

0

Ich habe es mit einigen Änderungen auf bhaibeka Antwort zu arbeiten. Anscheinend $ TM_LINE_NUMBER ist leer, und das macht die Cursor in die erste Zeile des Dokuments springen. Mit dem von der letzten Zeile loszuwerden, ist es ein Teil des Problems löst.

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

Das andere Problem ist, wie man den Cursor an das Ende der Auswahl zu bewegen. ich habe Es funktioniert durch Einfügen der 'leeren' Ausgabe am Ende der Auswahl (auf der rechten Seite: Ausgabe: "Einfügen nach Eingabe" und Format: "Text"). Wahrscheinlich ist dies nicht die eleganteste Art es zu tun, aber es funktioniert.

2

Dies funktioniert für mich, und es geht richtig bis zum Ende der Auswahl. Ich habe gerade den osascript-Teil in der vorherigen Antwort hinzugefügt und in den Code des ursprünglichen R-Bundles geschrieben, das von Hans-Jörg Bibiko geschrieben wurde. Setzen Sie "scope selector" auf "source.r" und "output" auf "discard". Setzen Sie "Input" auf "line" und es tut was ich brauche: senden Sie die Zeile, wenn nichts ausgewählt ist, und senden Sie die Auswahl anders.

edit: es funktioniert perfekt mit Auswahlen, aber nicht mit Linie. Wenn Sie keinen Text auswählen, führt er einfach alles vom Anfang der Datei aus zurück

edit2: gelöst, ich schrieb an Hans-Jörg Bibiko und er wies mich auf die "Input" -Auswahl.

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