GNU/Linux >> Tutoriels Linux >  >> Linux

Comment mapper une commande Vim pour exécuter des commandes Bash basées sur OS ?

En bref, les commandes bash uniques du terminal peuvent-elles contenir des conditions ? Si oui, comment ?

J'ai dans mon vimrc (partagé entre les systèmes) la commande suivante pour ouvrir mon document LaTeX actuel au format .pdf :
map ,v :!gnome-open %<.pdf <CR> <CR>

Ma question est, quelle est la meilleure façon d'avoir ,v exécuter simplement "open %<.pdf" quand je suis chez moi sur ma machine OS X ? Voici ma supposition de pseudo-code :

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

Ceci est exécuté comme une seule commande BASH. De tels conditionnels sont-ils possibles ? Si oui, quelqu'un pourrait-il m'aider avec la syntaxe? Sinon, cela peut-il être fait via des conditions dans le fichier vimrc ?

Réponse acceptée :

Une alternative serait simplement de générer correctement le raccourci clavier de la carte pour le système d'exploitation. Par exemple :

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

Cela a été testé et semble fonctionner, mais comme mon script Vim est un peu fragile et que j'ai peut-être manqué certains détails comme la citation appropriée, j'irais probablement plus avec l'approche de Jander et j'utiliserais simplement un shell wrapper que je suis de loin supérieur en écriture .

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

Et dans ~/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. Comment utiliser les commandes d'historique de Bash

  2. Comment effacer l'historique de Bash sous Linux

  3. Comment cette commande Su -c "..." semble-t-elle transmettre deux commandes au lieu d'une ?

  4. Comment exécuter la commande bash avec les privilèges sudo en Java ?

  5. Comment expirer un groupe de commandes dans Bash

Comment exécuter des commandes Shell via un serveur HTTP

Comment ajouter des commandes Linux à la file d'attente et les exécuter une par une

Comment corriger facilement les commandes Bash mal orthographiées sous Linux

[Bash Tips] Comment cd et ls en une seule commande

Comment exécuter plusieurs commandes Linux en une seule commande

Comment exécuter une commande dans un script shell ?