Mein Vim-Editor hebt automatisch PHP-Dateien ( vim file.php
), HTML-Dateien ( vim file.html
) usw. hervor.
Aber wenn ich tippe: vim file
und darin ein Bash-Skript schreibe, wird es nicht hervorgehoben.
Wie kann ich Vim anweisen, es als Bash-Skript hervorzuheben?
Ich beginne #!/bin/bash
oben in der Datei zu tippen, aber es funktioniert nicht.
quelle
bash
Skripte, auf die ich stoße, haben tatsächlich ein.sh
Suffix. Um Bash wirklich zu spezifizieren und nicht nursh
, würden Sie die#!/bin/bash
Shebang-Zeile in einer.sh
Datei verwenden..sh
Erweiterung zu geben, wird in vielen Kreisen als schlechte Form angesehen. Siehe zum Beispiel den faktoiden Bot, der vom relevanten Eintrag des Freenode # bash-Kanals verwendet wird: Wooledge.org/~greybot/meta/.shls.elf
? Außerdem: Bash-Skripte sind keine sh-Skripte (also nicht use.sh
) und die Erweiterung verursachen nur dann Kopfschmerzen bei Abhängigkeiten, wenn das Skript in einer anderen Sprache umgeschrieben wird. Siehe talisman.org/~erlkonig/documents/… ".py
Erweiterung für Python- Module verwendet, aber keine Python- Skripte im PATH) - aber in diesem Fall Die Erweiterung sollte korrekt wiedergeben, von welcher Shell das Skript korrekt analysiert werden kann..sh
impliziert "kompatibel mit allen POSIX-Shells", was für ein Bash- Skript im Allgemeinen nicht korrekt ist .Die bisherigen Antworten sind korrekt, sodass Sie den Dateityp mit der Erweiterung (like
.sh
) oder einer Shebang-Zeile (like#!/bin/bash
) identifizieren können. Wenn Sie keine haben, können Sie den Dateityp dennoch manuell angeben, indem Sie einen Modeline-Kommentar oben oder unten in Ihrer Datei 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
Dadurch wird vim angewiesen, die Datei als Shell-Skript zu behandeln. (Sie können auch andere Dinge in der modeline einstellen. In vim geben Sie
:help modeline
für weitere Informationen ein.)quelle
:
funktioniert diese Modeline in meiner Umgebung im Finale , während diese Modeline ohne das Finale:
nicht registriert wird. Die Hilfedokumentation zeigt eine Form einer Modeline, die nicht endet:
.:help modeline
) zeigt zwei Unterschiede: (1) Die Version mit dem Finale:
"ist mit einigen Versionen von Vi kompatibel" und (2) ohne das Finale verwenden:
Sie dasset
Schlüsselwort nicht. Da Sie nach der Modeline einen beliebigen Text einfügen können,:
funktioniert das Finale mit oder ohneset
Schlüsselwort.set modeline
in~/.vimrc
, sehen Sie diese Antwortsh
scheint die POSIX-Shell hervorzuheben, nicht Bash. Insbesondere kennzeichnet es eine gültige Bash-Syntax als Fehler, was ziemlich ärgerlich ist.Tatsächlich ist das Hervorheben der Syntax ein Merkmal von vim not vi. Versuchen Sie es mit dem Befehl vim und tun Sie es dann
:syntax on
.quelle
vim ~/.vimrc
hinzu und fügtesyntax on
sie der Datei hinzu und schloss sie dann mit:x
Ich kam zu dieser Antwort und suchte speziell nach Informationen zum Hervorheben der
bash
Syntax, nicht der POSIX-Shell. Wenn Sie einfach einset ft=sh
(oder ein gleichwertiges) Verfahren ausführen, wird die Datei für die POSIX-Shell hervorgehoben, wodurch eine Menge Syntax übrig bleibt, diebash
in rot hervorgehoben gültig ist . So erhalten Sie eine Bash-Hervorhebung:" 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
Beachten Sie, dass Sie den Befehl weiterhin benötigen , wenn dies
ft
bereitssh
derset
Fall ist. ansonsten derlet
nicht sofort wirksam.Sie können dies zu einem globalen Standard machen, indem Sie die Variable global machen, d
let g:is_bash = 1
. H.:help ft-sh-syntax
ist die Handbuchseite, die ich finden musste; Es erklärt dies und wie das Hervorheben anderer Geschmacksrichtungen der Schale ausgelöst wird.quelle
sh
Syntax-Textmarkers markieren sogar gültigen Posix-Sh-Code als ungültig (z. B.$(subshell)
) - dies korrigiert dies ebenfalls. Vielen Dank.Vim kann Dateitypen auch erkennen, indem es deren Inhalt überprüft (z. B. wenn die erste Zeile einen Bash Shebang enthält). Hier ist ein Zitat aus
filetype.txt
Hilfedatei:Wenn Ihr Dateityp nur durch Überprüfen des Inhalts der Datei erkannt werden kann
Erstellen Sie Ihr Benutzer-Laufzeitverzeichnis. Normalerweise verwenden Sie das erste Element der Option 'Laufzeitpfad'. Beispiel für Unix:
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 unter $ VIMRUNTIME / scripts.vim. Schreiben Sie diese Datei als "scripts.vim" in Ihr Benutzer-Laufzeitverzeichnis. Zum Beispiel für Unix:
Die Erkennung funktioniert sofort, Vim muss nicht neu gestartet werden.
Ihre Datei scripts.vim wird geladen, bevor die Standardprüfung nach Dateitypen erfolgt. Dies bedeutet, dass Ihre Regeln die Standardregeln in $ VIMRUNTIME / scripts.vim überschreiben.
quelle
set modeline
in~/.vimrc
, siehe diese Antwortvim erkennt man am obersten Kommentar
Versuchen Sie diese Zeile oben in der Datei
#!/bin/sh
quelle
Wenn Sie den Shebang oben in der Datei hinzugefügt haben, speichern Sie ihn und laden Sie ihn erneut (z
:w|e
). Die Syntaxfarbe kann aktiviert werden.Siehe auch Vim inkonsistente Syntax, die Bash-Dateien hervorhebt . Die akzeptierte Antwort kann ebenfalls hilfreich sein.
quelle
Für diejenigen, die eine Variante dieser Frage haben, dh wie man die Syntaxhervorhebung für Bash-Dateien ohne aktiviert
.sh
Erweiterung beim Öffnen automatisch ...Fügen Sie
filetype on
in Ihrem.vimrc
. Dies ermöglicht die Dateityperkennung, indem auch der Inhalt der Datei berücksichtigt wird. Beispielsweise werden Bash-Skripte auf densh
Dateityp gesetzt. Wenn Sie jedoch eingeben,#!
wird die Dateityperkennung für eine neue Datei, die mit vim erstellt wurde, nicht ausgelöst.set ft=sh
In diesem Fall müssen Sie sie verwenden . Für weitere Informationen , geben Sie:h filetype
in vim.Wie in den Kommentaren erwähnt, müssen Sie dies in Verbindung mit verwenden
syntax enable
, um die Hervorhebung zu aktivieren .Oder du könntest verwenden
:filetype detect
. Aus dem Dokument:quelle
filetype on
ohne Einstellung, und Sie müssen auch diesyntax enable
Hervorhebung aktivieren.vim erkennt standardmäßig bereits viele Dateitypen. Die meisten von ihnen arbeiten mit Dateierweiterungen, aber in einem solchen Fall analysiert vim auch den Inhalt der Datei, um den richtigen Typ zu erraten.
vim setzt den Dateityp für bestimmte Dateinamen wie
.bashrc
,.tcshrc
usw. automatisch. Aber eine Datei mit einem.sh
Erweiterung wird jedoch entweder als csh-, ksh- oder bash-Skript erkannt. Um festzustellen, um welche Art von Skript es sich genau handelt, liest vim die erste Zeile der Datei, um das #! Linie.Wenn die erste Zeile das Wort enthält
bash
, wird die Datei als Bash-Skript identifiziert. Normalerweise sehen Sie,#!/bin/bash
ob das Skript direkt ausgeführt werden soll, aber für eine Shell-Konfigurationsdatei# bash
würde auch die Verwendung einer einfachen Datei funktionieren.Wenn Sie sich die Details ansehen möchten, ist dies in implementiert
$VIMRUNTIME/filetype.vim
.quelle
Der wahrscheinlich einfachste Weg, um eine neue Datei mit Syntax hervorzuheben, besteht darin, sie nach dem Schreiben der Shebang-Zeile neu zu laden. Ein einfacher
:w
:e
schreibt die Datei aus, lädt sie neu und interpretiert die soeben geschriebene Shebang-Zeile, um Ihnen die entsprechende Syntaxhervorhebung zu geben.quelle
Wenn Sie den Dateityp bereits vor dem Öffnen des Skripts kennen oder 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
quelle
Wenn Sie eine neue Datei erstellen, kommt nur die Dateinamenerkennung ins Spiel. Die Inhaltserkennung (
#!/bin/bash
) gilt nicht, wenn Sie sie nach dem Erstellen eines neuen Puffers eingeben.Es ist sinnvoll, nur
:set ft=bash
das erste Mal zu arbeiten. Wenn Sie es das nächste Mal bearbeiten,#!/bin/bash
wird automatisch der richtige Dateityp festgelegt.quelle
ft=bash
muss gelesen werdenft=sh
. Auch ich mussteset modeline
in~/.vimrc
, damit es funktioniert, siehe diese Antwort