Mac OS X: cómo abrir vim en la terminal cuando se hace doble clic en un archivo

19

He definido mi propio tipo de archivo vim personalizado con resaltado, etc. Me gustaría abrirlo usando el vim basado en terminal cuando hago doble clic en él. Estoy usando mac os x. ¿Alguna sugerencia sobre cómo comenzar con esto?

Sixtyfootersdude
fuente

Respuestas:

17

Cree una aplicación de Automator para ejecutar el siguiente 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

Guarde la aplicación del automatizador. (por ejemplo, llámalo Vim Launcher )

Haga clic derecho (o control-clic) en su archivo de tipo vim personalizado (por ejemplo, use .vim como extensión) y en Abrir con ... elija la opción inferior Otro ... y encuentre su aplicación Automator (por ejemplo, Vim Launcher ), doble- Pinchalo.

Auge.

ghoppe
fuente
44
Para crear en Automator, puede hacer clic New Document, seleccionar la Applicationplantilla. En la Actions->Librarypestaña, haga clic en Utilities, luego Run AppleScript.
cevaris
1
No funciona en Yosemite.
keyvan
Tengo cosas que funcionan en Yosemite, aunque uso iTerm: thepugautomatic.com/2015/02/open-in-iterm-vim-from-finder
Henrik N
trabaja para mí en Yosemite. sin embargo, hay un caso extraño:
Ilias Karim
1
Esto no parece funcionar con iTerm en 10.12.5
pez remo
1

De los aproximadamente cinco minutos que pasé jugando con él para ver si podía, no pude encontrar una opción integrada para hacerlo.

Sin embargo, probablemente pueda escribir un Applescript simple que tomará la ruta absoluta de los archivos y luego se ejecutará vim {path}en un shell bash.

Josh K
fuente
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

Yo uso este AppleScript en su lugar. Activa Terminal.app después de la ejecución (¡no antes!) Para evitar que las cosas actúen de manera extraña cuando se usan Espacios. También cierra la ventana después de que Vim sale. Simplemente configure Terminal.app para cerrar después de salidas limpias.

ggustafsson
fuente
1

Solo quería agregar un comentario a la respuesta aceptada con los cambios de código necesarios para que funcione en Yosemite, pero como no tengo suficiente reputación no pude agregar un comentario y, por lo tanto, intentar responder a través de una respuesta.

El script "Abrir archivo en terminal desde Finder" funcionaba bien en Mavericks, pero dejó de funcionar después de la actualización a Yosemite. En Yosemite, el código en la respuesta aceptada funcionaría solo la primera vez, lo que significa que cuando hago doble clic en el primer archivo en el Finder, se abre bien, pero cuando hago clic en los archivos posteriores, simplemente abren nuevas ventanas de terminal en blanco (vim no se abrirá) con el símbolo del sistema.

Después de pasar por varios sitios, improvisé una versión que funciona bien. Estoy seguro de que hay una mejor manera de hacerlo, pero no tengo experiencia con Applescript y, por lo tanto, dejaré que otros sugieran mejoras.

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
fuente
En un Macbook Pro 2017 con Touchbar, encuentro que la [respuesta aceptada] ( superuser.com/a/139949/44785 ) funciona bien. Pero todavía quiero agregar la línea "cambiar directorio" (cd) para asegurar que pwd esté donde está el archivo. Esto ayuda a NerdTree a mostrar solo los archivos de la carpeta del archivo abierto.
protoiyer