Mac OS X: So öffnen Sie vim im Terminal, wenn Sie auf eine Datei doppelklicken

19

Ich habe meinen eigenen benutzerdefinierten vim-Dateityp mit Hervorhebung usw. definiert. Ich möchte ihn mit dem terminalbasierten vim öffnen, wenn ich darauf doppelklicke. Ich benutze Mac OS X. Gibt es Hinweise, wie Sie damit beginnen sollen?

Sixtyfootersdude
quelle

Antworten:

17

Erstellen Sie eine Automator-Anwendung, um das folgende Applescript auszuführen:

on run {input}
   set the_path to POSIX path of input
   set cmd to "vim " & quoted form of the_path
   tell application "System Events" to set terminalIsRunning to exists application process "Terminal"
   tell application "Terminal"
      activate
      if terminalIsRunning is true then
         do script with command cmd
      else
         do script with command cmd in window 1
      end if
   end tell
end run

Speichern Sie die Automator-Anwendung. (zB nenne es Vim Launcher )

Klicken Sie mit der rechten Maustaste (oder bei gedrückter Ctrl-Taste ) auf Ihre benutzerdefinierte vim-Datei (z. B. .vim als Erweiterung verwenden) und wählen Sie unter Öffnen mit… die untere Option Andere… und suchen Sie Ihre Automator-Anwendung (z. B. Vim Launcher ). Klick es.

Boom.

Ghoppe
quelle
4
Um in Automator zu erstellen, können Sie auf klicken New Documentund die ApplicationVorlage auswählen . Actions->LibraryKlicken Sie Utilitiesdann auf der Registerkarte auf Run AppleScript.
Cevaris
1
Funktioniert nicht in Yosemite.
Keyvan
Ich habe Dinge in Yosemite zum Laufen gebracht, obwohl ich iTerm benutze: thepugautomatic.com/2015/02/open-in-iterm-vim-from-finder
Henrik N
arbeitet für mich in Yosemite. Es gibt jedoch einen seltsamen Randfall
Ilias Karim
1
Dies scheint mit iTerm am 10.12.5
oarfish 20.06.17
1

In den ungefähr fünf Minuten, in denen ich damit gespielt habe, konnte ich keine eingebaute Option dafür finden.

Sie können jedoch wahrscheinlich ein einfaches Applescript schreiben, das den absoluten Pfad der Dateien übernimmt und dann vim {path}in einer Bash-Shell ausgeführt wird.

Josh K
quelle
1
set the_path to POSIX path of input
   set cmd to "vim " & quoted form of the_path & "; exit"
   tell application "System Events" to set terminalIsRunning to exists application process "Terminal"
   tell application "Terminal"
      if terminalIsRunning is true then
         do script with command cmd
      else
         do script with command cmd in window 1
      end if
      activate
   end tell
end run

Ich benutze stattdessen dieses AppleScript. Es aktiviert Terminal.app nach (nicht vor!) Der Ausführung, um zu verhindern, dass Dinge bei der Verwendung von Leerzeichen seltsam wirken. Es schließt auch das Fenster, nachdem Vim beendet wurde. Stellen Sie einfach Terminal.app so ein, dass es nach sauberen Exits geschlossen wird.

ggustafsson
quelle
1

Ich wollte der akzeptierten Antwort nur einen Kommentar mit den Codeänderungen hinzufügen, die erforderlich sind, damit sie in Yosemite funktioniert. Da ich jedoch keinen ausreichenden Ruf habe, konnte ich keinen Kommentar hinzufügen und daher versuchen, über eine Antwort zu antworten.

Das Skript "Open File in Terminal from Finder" funktionierte in Mavericks einwandfrei, funktionierte jedoch nach dem Upgrade auf Yosemite nicht mehr. In Yosemite würde der Code in der akzeptierten Antwort nur beim ersten Mal funktionieren - das heißt, wenn ich auf die erste Datei im Finder doppelklicke, wird sie problemlos geöffnet. Wenn ich jedoch auf die nachfolgenden Dateien klicke, werden nur leere neue Terminalfenster geöffnet (vim öffnet sich nicht) mit Eingabeaufforderung.

Nachdem Sie mehrere Websites durchgesehen haben, haben Sie eine Version zusammengeschustert, die einwandfrei funktioniert. Ich bin mir sicher, dass es einen besseren Weg gibt, aber ich habe keine Erfahrung mit Applescript und überlasse es anderen, Verbesserungen vorzuschlagen.

on run {input}
    set the_path to POSIX path of input
    -- set cmd to "vim " & quoted form of the_path
    -- we can do a change directory to make NerdTree happy
    set cmd to "clear;cd `dirname " & the_path & "`;vim " & quoted form of the_path & "; exit"

    tell application "System Events" to set terminalIsRunning to exists application process "Terminal"
    tell application "Terminal"
        if terminalIsRunning is true then
            -- CHANGED code starts --
            set newWnd to do script with command cmd
            do script with command cmd in newWnd
            -- CHANGED code ends --
        else
            do script with command cmd in window 1
        end if
        activate
    end tell
end run
protoiyer
quelle
In einem 2017 Macbook Pro mit Touchbar funktioniert die [akzeptierte Antwort] ( superuser.com/a/139949/44785 ) einwandfrei . Ich möchte jedoch weiterhin die Zeile "change directory" (cd) hinzufügen, um sicherzustellen, dass sich die Datei im pwd befindet. Dies hilft NerdTree, nur die Dateien aus dem Ordner der geöffneten Datei anzuzeigen.
Protoiyer