GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie ordnet man einen Vim-Befehl zu, um Bash-Befehle basierend auf Os auszuführen?

Kurz gesagt, können einzelne Bash-Befehle im Terminal Bedingungen enthalten? Wenn ja, wie?

Ich habe in meinem vimrc (systemübergreifend geteilt) den folgenden Befehl, um mein aktuelles LaTeX-Dokument in .pdf-Form zu öffnen:
map ,v :!gnome-open %<.pdf <CR> <CR>

Meine Frage ist, was ist der beste Weg, um ,v einfach „open %<.pdf“ auszuführen, wenn ich zu Hause auf meinem OS X-Rechner bin? Hier ist meine Pseudo-Code-Vermutung:

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

Dies wird als einzelner BASH-Befehl ausgeführt. Sind solche Bedingungen möglich? Wenn ja, könnte mir jemand bei der Syntax helfen? Wenn nicht, kann dies über Bedingungen in der vimrc-Datei erfolgen?

Akzeptierte Antwort:

Eine Alternative wäre, einfach die Tastenkombination der Karte korrekt für das Betriebssystem zu generieren. Zum Beispiel:

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

Dies wurde getestet und scheint zu funktionieren, aber da mein Vim-Skript etwas wackelig ist und ich möglicherweise einige Details wie das richtige Zitieren übersehen habe, würde ich wahrscheinlich mehr mit Janders Ansatz gehen und einfach einen Shell-Wrapper verwenden, der mir beim Schreiben weit überlegen ist .

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

Und 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. So löschen Sie den Bash-Verlauf unter Linux

  2. Wie scheint dieser Befehl su -c „…“ zwei Befehle anstelle von einem zu übergeben?

  3. Wie kann ich als anderer Benutzer mit sudo eine Reihe von Befehlen in einer Bash-Subshell ausführen?

  4. Wie führe ich einen Bash-Befehl mit sudo-Berechtigungen in Java aus?

  5. Wie führe ich externe Shell-Befehle vom Laravel-Controller aus?

So führen Sie Shell-Befehle über einen HTTP-Server aus

So fügen Sie der Warteschlange Linux-Befehle hinzu und führen sie einzeln aus

So korrigieren Sie einfach falsch geschriebene Bash-Befehle in Linux

[Bash-Tipps] How To cd und ls in einem Befehl

So führen Sie mehrere Linux-Befehle in einem einzigen Befehl aus

Wie führe ich einen Befehl in einem Shell-Skript aus?