Könnte mir jemand in einfachen Worten erklären, wie man das Einrückungsverhalten von Vim basierend auf dem Dateityp am einfachsten ändert? Wenn ich beispielsweise eine Python-Datei öffne, sollte sie mit 2 Leerzeichen eingerückt werden. Wenn ich jedoch ein Powershell-Skript öffne, sollten 4 Leerzeichen verwendet werden.
file
vim
settings
indentation
EBGreen
quelle
quelle
Antworten:
Sie können
.vim
Dateien hinzufügen , die ausgeführt werden sollen, wenn vim zu einem bestimmten Dateityp wechselt.Zum Beispiel habe ich eine Datei
~/.vim/after/ftplugin/html.vim
mit folgendem Inhalt:Dies führt dazu, dass vim Registerkarten mit einer Breite von 2 Zeichen zum Einrücken verwendet (die
noexpandtab
Option ist an anderer Stelle in meiner Konfiguration global festgelegt).Dies wird hier beschrieben: http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4 , scrollen Sie nach unten zum Abschnitt über Dateityp-Plugins.
quelle
~/.vim/after/ftplugin/html.vim
stattdessen eingeben. Aber wie andere unten ausgeführt haben, ist es viel schöner, nurautocmd FileType html setlocal shiftwidth=2 tabstop=2
zu Ihrem hinzuzufügen.vimrc
.autocmd FileType javascript setlocal shiftwidth=2 tabstop=2
)filetype plugin on
zu Ihrem vimrc hinzufügen .Verwenden Sie ftplugins oder automatische Befehle, um Optionen festzulegen.
ftplugin
Im
~/.vim/ftplugin/python.vim:
Und vergessen Sie nicht, sie einzuschalten
~/.vimrc
:(
:h ftplugin
für weitere Informationen)Autocommand
In
~/.vimrc
:Sie können mit ihren kurzen Versionen jeder der langen Befehle oder Einstellungen ersetzen:
autocmd
:au
setlocal
:setl
shiftwidth
:sw
tabstop
:ts
softtabstop
:sts
expandtab
:et
Ich würde auch vorschlagen, den Unterschied zwischen
tabstop
und zu lernensofttabstop
. Viele Leute wissen nichts darübersofttabstop
.quelle
sw
ist kurz fürsoftwidth
,sts
ist kurz fürsofttabstop
,et
ist kurz fürexpandtab
,setl
ist kurz fürsetlocal
undau
ist kurz fürautocmd
. Sie können die langen Formulare anstelle der kurzen Formulare verwenden.sw
erweitertshiftwidth
alssoftwidth
.Bearbeiten Sie Ihre
~/.vimrc
und fügen Sie verschiedene Dateitypen für verschiedene Einrückungen hinzu, z. B. Ich möchtehtml/rb
Einrückungen für 2 Leerzeichen undjs/coffee
Einrückungen von Dateien für 4 Leerzeichen:Siehe : Festlegen der Vim-Leerzeicheneinstellungen nach Dateityp
quelle
"
:)'
gibt Fehler auf allen vim meines Linux. (7.3+, 8.0 ...)"
, dh nicht mit einer anderen schließen"
. Ich bin mir nicht sicher, warum ich das kommentiert habe.'
"
"
Fügen Sie autocmd-Befehle basierend auf dem Dateisuffix in Ihr ~ / .vimrc ein
Die Befehle, nach denen Sie suchen, sind wahrscheinlich ts = und sw =
quelle
FileType
?Normalerweise arbeite ich mit
expandtab
Set, aber das ist schlecht für Makefiles. Ich habe kürzlich hinzugefügt:bis zum Ende meiner .vimrc-Datei und es erkennt Makefile, makefile und * .mk als Makefiles und erweitert keine Registerkarten. Vermutlich können Sie dies erweitern.
quelle
Persönlich verwende ich diese Einstellungen in .vimrc:
quelle
Dies mag den meisten von uns bekannt sein, aber trotzdem (ich war das erste Mal verwirrt): Wenn Sie
:set et
(:set
expandtabs) ausführen, werden die bereits in der Datei vorhandenen Registerkarten nicht geändert:retab
. Zum Beispiel:und die Registerkarten in der Datei werden durch genügend Leerzeichen ersetzt. Um Tabs zurück zu haben, gehen Sie einfach wie folgt vor:
quelle
Heute können Sie editorconfig ausprobieren , es gibt auch ein vim-Plugin dafür. Auf diese Weise können Sie nicht nur die Einrückungsgröße in vim ändern, sondern in vielen anderen Editoren konsistente Codierungsstile beibehalten.
Im Folgenden finden Sie eine einfache Editor-Konfiguration. Wie Sie sehen können, haben die Python-Dateien 4 Leerzeichen zum Einrücken und die Mops-Vorlagendateien nur 2.
quelle
Während Sie den Einzug von Vim mit dem Einrückungs-Plugin oder manuell mithilfe der Einstellungen konfigurieren können, empfehle ich die Verwendung eines Python-Skripts namens Vindect , das beim Öffnen einer Python-Datei automatisch die relevanten Einstellungen für Sie festlegt. Verwenden Sie diesen Tipp , um die Verwendung von Vindect noch effektiver zu gestalten. Als ich anfing, Python-Dateien zu bearbeiten, die von anderen mit verschiedenen Einrückungsstilen (Tabulator gegen Leerzeichen und Anzahl der Leerzeichen) erstellt wurden, war das unglaublich frustrierend. Aber Vindect zusammen mit dieser Einrückungsdatei
Empfehlen Sie auch:
quelle
Für Benutzer
autocmd
ist es eine bewährte Methode, diese zu gruppieren. Wenn sich eine Gruppierung auf die Dateityperkennung bezieht, haben Sie möglicherweise Folgendes:Gruppierungen helfen dabei, die
.vimrc
Organisation aufrechtzuerhalten , insbesondere wenn einem Dateityp mehrere Regeln zugeordnet sind. Im obigen Beispiel wird eine Kommentarverknüpfung für .c-Dateien definiert.Der erste Aufruf von
autocmd!
weist vim an, alle zuvor definierten Autobefehle in dieser Gruppierung zu löschen. Dies verhindert eine doppelte Definition, wenn.vimrc
erneut eine Quelle gefunden wird. Siehe:help augroup
für weitere Informationen.quelle
Ich benutze ein Dienstprogramm, das ich in C geschrieben habe
autotab
. Er analysiert die ersten paar tausend Zeilen einer Datei , die Sie Werte für die Vim Parameter laden und bestimmtshiftwidth
,tabstop
undexpandtab
.Dies wird zum Beispiel kompiliert mit
gcc -O autotab.c -o autotab
. Anweisungen zur Integration in Vim finden Sie in der Kommentarüberschrift oben.Autotab ist ziemlich clever, kann aber von Zeit zu Zeit verwirrt werden, insbesondere dadurch, dass es uneinheitlich mit verschiedenen Einrückungsstilen gepflegt wurde.
Wenn in einer Datei offensichtlich Tabulatoren oder eine Kombination aus Tabulatoren und Leerzeichen zum Einrücken verwendet werden, ermittelt Autotab anhand von Faktoren wie der Ausrichtung interner Elemente über aufeinanderfolgende Zeilen, wie z. B. Kommentare, welche Registerkartengröße verwendet wird.
Es funktioniert für eine Vielzahl von Programmiersprachen und verzeiht "Out-of-Band" -Elemente, die Einrückungsinkrementen nicht entsprechen, wie C-Vorverarbeitungsanweisungen, C-Anweisungsbezeichnungen, ganz zu schweigen von den offensichtlichen Leerzeilen.
quelle