Mac OS X: jak otworzyć vima w terminalu po dwukrotnym kliknięciu pliku

19

Zdefiniowałem własny typ pliku vim z podświetlaniem itp. Chciałbym go otworzyć za pomocą vima opartego na terminalu, kiedy kliknę go dwukrotnie. Używam Mac OS X. Wszelkie wskazówki, jak zacząć od tego?

sześćdziesiąt stóp
źródło

Odpowiedzi:

17

Utwórz aplikację Automator, aby uruchomić następujący skrypt Apple:

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

Zapisz aplikację automatyzatora. (np. nazwij go Vim Launcher )

Kliknij prawym przyciskiem myszy (lub kliknij z wciśniętym klawiszem Control) niestandardowy plik typu vim (np. Użyj .vim jako rozszerzenia) iw obszarze Otwórz za pomocą… wybierz dolną opcję Inne… i znajdź aplikację Automator (np. Vim Launcher ), dwukrotnie- kliknij to.

Bum.

ghoppe
źródło
4
Aby utworzyć w Automatorze, możesz kliknąć New Document, wybrać Applicationszablon. Na Actions->Librarykarcie kliknij Utilities, a następnie Run AppleScript.
cevaris
1
Nie działa w Yosemite.
keyvan
W Yosemite wszystko działa, ale używam iTerm: thepugautomatic.com/2015/02/open-in-iterm-vim-from-finder
Henrik N
pracuje dla mnie w Yosemite. jest jednak jeden dziwny przypadek na krawędzi
Ilias Karim
1
Wydaje się, że to nie działa z iTerm w dniu 10.12.5
oarfish
1

Z około pięciu minut, które spędziłem na graniu z nim, aby sprawdzić, czy nie, nie mogę znaleźć wbudowanej opcji, aby to zrobić.

Jednak prawdopodobnie możesz napisać prosty skrypt Apple, który pobierze ścieżkę bezwzględną do plików, a następnie uruchomi ją vim {path}w powłoce bash.

Josh K.
źródło
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

Zamiast tego używam tego AppleScript. Aktywuje Terminal.app po wykonaniu (nie wcześniej!), Aby zapobiec dziwnym działaniom podczas używania Spaces. Zamyka także okno po wyjściu Vima. Wystarczy ustawić Terminal.app, aby zamykał się po czystych wyjściach.

ggustafsson
źródło
1

Chciałem tylko dodać komentarz do zaakceptowanej odpowiedzi ze zmianami kodu potrzebnymi do działania w Yosemite, ale ponieważ nie mam wystarczającej reputacji, nie mogłem dodać komentarza, a zatem próbuję odpowiedzieć za pomocą odpowiedzi.

Skrypt „Otwórz plik w terminalu z Findera” działał dobrze w Mavericks, ale przestał działać po aktualizacji do Yosemite. W Yosemite kod w zaakceptowanej odpowiedzi zadziałałby tylko za pierwszym razem - co oznacza, że ​​kiedy kliknę dwukrotnie pierwszy plik w Finderze, otworzy się dobrze, ale kiedy kliknę kolejne pliki, po prostu otworzą puste okna nowego terminalu (vim nie otworzy się) w wierszu polecenia.

Po przejściu przez wiele witryn ułożyłem wersję, która działa dobrze. Jestem pewien, że istnieje lepszy sposób, aby to zrobić, ale nie mam doświadczenia z Applescript, więc pozostawiam innym sugestie dotyczące ulepszeń.

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
źródło
W Macbooku Pro 2017 z panelem dotykowym stwierdzam, że [zaakceptowana odpowiedź] ( superuser.com/a/139949/44785 ) działa dobrze. Chcę jednak dodać wiersz „zmień katalog” (cd), aby mieć pewność, że plik pwd jest tam, gdzie jest plik. Pomaga to NerdTree wyświetlać tylko pliki z folderu otwartych plików.
protoiyer