GNU/Linux >> Linux Esercitazione >  >> Linux

Come mappare un comando Vim per eseguire comandi Bash basati su Os?

In breve, i singoli comandi bash nel terminale possono contenere condizionali? Se sì, come?

Ho nel mio vimrc (condiviso tra i sistemi) il seguente comando per aprire il mio attuale documento LaTeX in formato .pdf:
map ,v :!gnome-open %<.pdf <CR> <CR>

La mia domanda è:qual è il modo migliore per avere ,v eseguire semplicemente "open %<.pdf" quando sono a casa sulla mia macchina OS X? Ecco la mia ipotesi di pseudo-codice:

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

Questo viene eseguito come un singolo comando BASH. Sono possibili tali condizionali? Se si, qualcuno potrebbe aiutarmi con la sintassi? In caso contrario, è possibile farlo tramite condizionali nel file vimrc?

Risposta accettata:

Un'alternativa sarebbe semplicemente generare correttamente la combinazione di tasti della mappa per il sistema operativo. Ad esempio:

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

Questo è stato testato e sembra funzionare, ma poiché il mio script Vim è un po' traballante e potrei aver perso alcuni dettagli come la citazione corretta, probabilmente andrei di più con l'approccio di Jander e userei solo un wrapper di shell che sono di gran lunga superiore nella scrittura .

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

E in ~/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. Come cancellare la cronologia di Bash su Linux

  2. In che modo questo comando Su -c "..." sembra passare due comandi invece di uno?

  3. Come posso eseguire una serie di comandi in una subshell bash come un altro utente usando sudo?

  4. Come eseguire il comando bash con privilegi sudo in Java?

  5. Come eseguire il timeout di un gruppo di comandi in Bash

Come eseguire i comandi della shell tramite il server HTTP

Come aggiungere comandi Linux alla coda ed eseguirli uno per uno

Come correggere facilmente i comandi Bash errati in Linux

[Suggerimenti Bash] Come fare cd e ls in un comando

Come eseguire più comandi Linux in un unico comando

Come eseguire un comando in uno script della shell?