Mac OS X: как открыть vim в терминале при двойном щелчке по файлу

19

Я определил свой собственный тип файла vim с подсветкой и т. Д. Я хотел бы открыть его, используя vim на основе терминала, когда я дважды щелкаю по нему. Я использую Mac OS X Любые указатели о том, как начать на этом?

sixtyfootersdude
источник

Ответы:

17

Создайте приложение Automator для запуска следующего appleScript:

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

Сохраните приложение автоматизатора. (например, назовите его Vim Launcher )

Щелкните правой кнопкой мыши (или удерживайте нажатой клавишу «Control» ) на своем пользовательском файле типа vim (например, используйте .vim в качестве расширения) и в разделе « Открыть с помощью…» выберите нижний параметр « Другой» и найдите приложение Automator (например, Vim Launcher ), дважды щелкните по нему

Boom.

ghoppe
источник
4
Чтобы создать в Automator, вы можете нажать New Document, выбрать Applicationшаблон. На Actions->Libraryвкладке нажмите Utilities, затем Run AppleScript.
Чеварис
1
Не работает в Йосемити.
Кейван
У меня все работает в Йосемити, хотя я использую iTerm: thepugautomatic.com/2015/02/open-in-iterm-vim-from-finder
Henrik N
работает для меня в Йосемити. хотя есть один странный крайний случай
Ильяс Карим
1
Похоже, что это не работает с iTerm на 10.12.5
oarfish
1

Из пяти или около того минут, которые я потратил, играя с ним, чтобы посмотреть, получится ли, я не смог найти встроенную опцию для этого.

Тем не менее, вы, вероятно, можете написать простой Applescript, который будет принимать абсолютный путь к файлам, а затем запускаться vim {path}в оболочке bash.

Джош К
источник
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

Я использую этот AppleScript вместо этого. Он активирует Terminal.app после (не до!) Выполнения, чтобы мешать вещам вести себя странно при использовании пробелов. Он также закрывает окно после выхода из Vim. Просто установите Terminal.app для закрытия после чистых выходов.

ggustafsson
источник
1

Я просто хотел добавить комментарий к принятому ответу с изменениями кода, необходимыми для его работы в Yosemite, но, поскольку у меня нет достаточной репутации, я не смог добавить комментарий и, следовательно, пытался ответить через ответ.

Сценарий «Открыть файл в терминале из Finder» работал нормально в Mavericks, но он перестал работать после обновления до Yosemite. В Yosemite код в принятом ответе будет работать только в первый раз - это означает, что когда я дважды щелкаю первый файл в Finder, он открывается нормально, но когда я нажимаю на последующие файлы, они просто открывают пустые новые окна терминала (vim не открывается) с командной строкой.

Пройдя по нескольким сайтам, собрал версию, которая отлично работает. Я уверен, что есть лучший способ сделать это, но у меня нет опыта работы с Applescript, и поэтому я оставлю это другим, чтобы предложить какие-либо улучшения.

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
источник
В Macbook Pro 2017 года с сенсорной панелью я обнаружил, что [принятый ответ] ( superuser.com/a/139949/44785 ) работает нормально. Но я все еще хочу добавить строку «изменить каталог» (cd), чтобы файл pwd находился там, где находится файл. Это помогает NerdTree отображать только файлы из папки открытого файла.
Протоиер