it-swarm.com.de

Wie hebe ich Bash-Skripte in Vim hervor?

Mein Vim-Editor hebt automatisch PHP -Dateien (vim file.php), HTML-Dateien (vim file.html) usw. hervor.

Wenn ich jedoch vim file eingebe und darin ein Bash-Skript schreibe, wird es nicht hervorgehoben.

Wie kann ich Vim sagen, es als Bash-Skript hervorzuheben?

Ich fange an, #!/bin/bash oben in der Datei einzugeben, aber es funktioniert nicht.

61

Vergeben Sie dem Shell-Skript korrekt eine Erweiterung .sh? Die automatische Syntaxauswahl von Vim basiert fast vollständig auf der Erkennung des Dateinamens (Erweiterung). Wenn für eine Datei keine Syntax festgelegt ist (oder die falsche Syntax ist), ändert Vim nicht automatisch die richtige Syntax, nur weil Sie mit der Eingabe eines Skripts in einer bestimmten Sprache begonnen haben.

Als temporäre Problemumgehung aktiviert der Befehl :set syn=sh die Hervorhebung der Shell-Skript-Syntax.

74
Mark Rushakoff

Die Antworten sind soweit korrekt, dass Sie die Erweiterung (wie .sh) oder eine Shebang-Zeile (wie #!/bin/bash) verwenden können, um den Dateityp zu identifizieren. Wenn Sie über keine dieser Optionen verfügen, können Sie den Dateityp immer noch manuell angeben, indem Sie am Anfang oder Ende Ihrer Datei einen Modeline-Kommentar verwenden.

Wenn Sie beispielsweise ein Skript ohne Erweiterung als Shell-Skript identifizieren möchten, können Sie diesen Kommentar oben in Ihre Datei einfügen:

# vim: set filetype=sh :

oder

# vim: filetype=sh

Dies weist vim an, die Datei als Shell-Skript zu behandeln. (Sie können auch andere Dinge in der Modeline setzen. In vim geben Sie :help modeline für weitere Informationen ein.)

27
bryant

Tatsächlich ist das Hervorheben von Syntax eine Funktion von vim nicht vi . Versuchen Sie es mit dem Befehl vim und dann

:syntax on.

17
Gaurav Khare

Vim kann Dateitypen auch durch Untersuchen des Inhalts erkennen (z. B. wenn die erste Zeile einen bash Shebang enthält). Hier ein Zitat aus der filetype.txt-Hilfedatei:

Wenn Ihr Dateityp nur durch Überprüfen des Inhalts der Datei erkannt werden kann

Erstellen Sie Ihr Benutzerlaufzeitverzeichnis. Normalerweise verwenden Sie das erste Element der Option "Laufzeitpfad". Beispiel für Unix:

:!mkdir ~/.vim

Erstellen Sie dazu eine vim-Skriptdatei. Beispiel:

if did_filetype()   " filetype already set..
    finish      " ..don't do these checks
endif
if getline(1) =~ '^#!.*\<mine\>'
    setfiletype mine
elseif getline(1) =~? '\<drawing\>'
    setfiletype drawing
endif

Weitere Beispiele finden Sie in $ VIMRUNTIME/scripts.vim. Schreiben Sie diese Datei als "scripts.vim" in Ihr Benutzerlaufzeitverzeichnis. Für Beispiel für Unix:

:w ~/.vim/scripts.vim

Die Erkennung funktioniert sofort, es ist kein Neustart von Vim erforderlich.

Ihre scripts.vim wird vor der Standardprüfung nach Dateitypen geladen. Dies bedeutet, dass Ihre Regeln die Standardregeln in $ VIMRUNTIME/scripts.vim überschreiben.

13
Matteo Riva

Ich kam zu dieser Antwort und suchte speziell nach der Hervorhebung derbash- Syntax, nicht nach der POSIX-Shell. Wenn Sie einfach einen set ft=sh (oder einen gleichwertigen Code) ausführen, wird die Datei für POSIX Shell hervorgehoben, wodurch eine Menge Syntax, die in bash gültig ist, rot markiert wird. Um bash hervorzuheben:

" Set a variable on the buffer that tells the sh syntax highlighter
" that this is bash:
let b:is_bash = 1
" Set the filetype to sh
set ft=sh

Wenn Ihre ft bereits sh ist, benötigen Sie noch den Befehl set. Andernfalls wird die let nicht sofort wirksam. 

Sie können dies als globalen Standard festlegen, indem Sie die Variable global definieren, d. H. let g:is_bash = 1.

:help ft-sh-syntax ist die Handbuchseite, die ich finden musste; es erklärt dies und wie man die Hervorhebung anderer Shell-Aromen anstößt.

11
Thanatos

vim kann durch den obersten Kommentar erkennen 

versuchen Sie diese Zeile am Anfang der Datei

#!/bin/sh
6
Arun Karikalan

Wenn Sie den Shebang am oberen Rand der Datei hinzugefügt haben, speichern Sie ihn und laden Sie ihn erneut (z. B. :w|e). Syntaxfärbung kann eintreten.

Siehe auch Vim inkonsistente Syntax-Hervorhebung von Bash-Dateien , die akzeptierte Antwort kann auch hilfreich sein.

1
dash-tom-bang

Wenn Sie den Dateityp bereits kennen, bevor Sie das Skript öffnen, oder wenn Sie ein neues Skript ohne eine übliche Erweiterung erstellen, können Sie es wie folgt an vim in der Befehlszeile übergeben:

vim -c 'setfiletype sh' path/to/script
vim -c 'setfiletype python' path/to/script
0
Edge-Case

Die einfachste Möglichkeit, die Syntax für eine neue Datei hervorzuheben, besteht darin, sie nach dem Schreiben der Shebang-Zeile neu zu laden. Ein einfacher :w:e schreibt die Datei, lädt sie neu und interpretiert die soeben geschriebene Shebang-Zeile, um die entsprechende Syntaxhervorhebung zu ermöglichen.

0
cmaster

vim erkennt bereits viele Dateitypen standardmäßig. Die meisten von ihnen arbeiten nach Dateierweiterungen. In diesem Fall analysiert vim jedoch auch den Inhalt der Datei, um den korrekten Typ zu ermitteln.

vim legt den Dateityp für bestimmte Dateinamen wie .bashrc, .tcshrc usw. automatisch fest. Eine Datei mit der Erweiterung .sh wird jedoch entweder als csh-, ksh- oder bash-Skript erkannt. Um herauszufinden, um welche Art von Skript es sich genau handelt, liest vim die erste Zeile der Datei und betrachtet die #! Linie.

Wenn die erste Zeile das Wort bash enthält, wird die Datei als Bash-Skript identifiziert. Normalerweise sehen Sie #!/bin/bash, wenn das Skript direkt ausgeführt werden soll, aber für eine Shell-Konfigurationsdatei mit einem einfachen # bash auch funktionieren würde.

Wenn Sie sich die Details ansehen möchten, ist dies in $VIMRUNTIME/filetype.vim implementiert.

0
raimue