GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo asignar un comando Vim para ejecutar comandos Bash según el sistema operativo?

En resumen, ¿pueden los comandos bash individuales en la terminal contener condicionales? Si es así, ¿cómo?

Tengo en mi vimrc (compartido entre sistemas) el siguiente comando para abrir mi documento LaTeX actual en formato .pdf:
map ,v :!gnome-open %<.pdf <CR> <CR>

Mi pregunta es, ¿cuál es la mejor manera de hacer que ,v ejecute simplemente "abrir %<.pdf" cuando estoy en casa en mi máquina OS X? Aquí está mi suposición de pseudocódigo:

... if [$OSTYPE == "darwin*"] then open %<.pdf else gnome-open %<.pdf ...

Esto se ejecuta como un solo comando BASH. ¿Son posibles tales condicionales? Si es así, ¿alguien podría ayudarme con la sintaxis? Si no, ¿se puede hacer esto a través de condicionales en el archivo vimrc?

Respuesta aceptada:

Una alternativa sería simplemente generar la combinación de teclas del mapa correctamente para el sistema operativo. Por ejemplo:

if executable("cmd.exe")
    map ,v :!cmd.exe /C start "" "%<.pdf"<CR><CR>
elseif $OSTYPE =~ "darwin.*"
    map ,v :!open '%<.pdf'<CR><CR>
elseif executable("gnome-open")
    map ,v :!gnome-open '%<.pdf'<CR><CR>
endif

Esto fue probado y parece funcionar, pero como mi secuencia de comandos de Vim es un poco inestable y es posible que me haya perdido algunos detalles como las citas adecuadas, probablemente seguiría más el enfoque de Jander y solo usaría un contenedor de shell que soy muy superior en escritura. .

map ,v :!open.sh '%<.pdf'<CR><CR>

Y en ~/bin/open.sh :

#!/bin/sh

if echo "$OSTYPE" | grep "^darwin" >/dev/null 2>&1; then
    open "[email protected]" &
elif type gnome-open &>/dev/null; then
    gnome-open "[email protected]" &
fi

Linux
  1. Cómo usar los comandos del historial de Bash

  2. Cómo borrar el historial de Bash en Linux

  3. ¿Cómo ejecutar el comando bash con privilegios sudo en Java?

  4. ¿Cómo ejecutar un script bash?

  5. ¿Cómo agregar un comando en el editor vim?

Cómo ejecutar comandos de Shell a través del servidor HTTP

Cómo agregar comandos de Linux a la cola y ejecutarlos uno por uno

Cómo corregir fácilmente los comandos Bash mal escritos en Linux

[Consejos de Bash] Cómo cd y ls en un solo comando

Cómo ejecutar múltiples comandos de Linux en un solo comando

¿Cómo ejecutar un comando en un script de Shell?