Ändern des Vim-Einzugverhaltens nach Dateityp

Kann mir jemand in einfachen Worten erklären, wie man das Einzugsverhalten von Vim am einfachsten anhand des Dateityps ändert? Zum Beispiel, wenn ich eine Python-Datei öffne, sollte es mit 2 Leerzeichen einrücken, aber wenn ich ein Powershell-Skript öffne, sollte es 4 Leerzeichen verwenden.

Sie können .vim Dateien hinzufügen, die immer dann ausgeführt werden, wenn vim zu einem bestimmten Dateityp wechselt.

Zum Beispiel habe ich eine Datei ~/.vim/after/ftplugin/html.vim mit folgendem Inhalt:

 setlocal shiftwidth=2 setlocal tabstop=2 

Dies führt dazu, dass vim Tabs mit einer Breite von 2 Zeichen zum Einrücken verwendet (die Option noexpandtab wird global an anderer Stelle in meiner Konfiguration gesetzt).

Dies ist hier beschrieben: http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4 , scrollen Sie nach unten zum Abschnitt über Dateityp-Plugins.

Verwenden Sie ftplugins oder autocommands, um Optionen festzulegen. (: h ftplugin für weitere Informationen)

In ~ / .vim / ftplugin / python.vim:

 setlocal sw=2 sts=2 et 

Und vergiss nicht, sie in ~ / .vimrc einzuschalten

 filetype plugin indent on 

Oder in ~ / .vimrc

 au FileType python setl sw=2 sts=2 et 

Ich würde auch vorschlagen, den Unterschied zwischen “ts” und “st” zu lernen. Viele Leute wissen nichts über “M”.

editiere deine ~/.vimrc und füge verschiedene Dateitypen für verschiedene Einrückungen hinzu, zB möchte ich html/rb Einrückung für 2 Leerzeichen und js/coffee Dateien Einrückung für 4 Leerzeichen:

 " by default, the indent is 2 spaces. set shiftwidth=2 set softtabstop=2 set tabstop=2 " for html/rb files, 2 spaces autocmd Filetype html setlocal ts=2 sw=2 expandtab autocmd Filetype ruby setlocal ts=2 sw=2 expandtab " for js/coffee/jade files, 4 spaces autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 expandtab autocmd Filetype coffeescript setlocal ts=4 sw=4 sts=0 expandtab autocmd Filetype jade setlocal ts=4 sw=4 sts=0 expandtab 

Siehe : Einstellen der Vim-Whitespace-Voreinstellungen nach Dateityp

Setzen Sie autocmd-Befehle basierend auf dem Dateisuffix in Ihrem ~ / .vimrc

 autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab autocmd BufRead,BufNewFile *.pl syntax on 

Die Befehle, nach denen Sie suchen, sind wahrscheinlich ts = und sw =

Ich arbeite normalerweise mit expandtab set, aber das ist schlecht für Makefiles. Ich habe kürzlich hinzugefügt:

 :autocmd FileType make set noexpandtab 

an das Ende meiner .vimrc-Datei und erkennt Makefile, Makefile und * .mk als Makefiles und erweitert keine Tabs. Vermutlich können Sie das erweitern.

Ich bin immer wieder überrascht von Leuten, die die Größe von Tabs für verschiedene Dateitypen ändern. Was in aller Welt machst du, wenn du eine Datei mit weniger anschaust?

Persönlich verwende ich diese Einstellungen in .vimrc:

 autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab 

Das könnte den meisten von uns bekannt sein, aber trotzdem (ich war mein erstes Mal verwirrt): Doing :set et ( :set expandtabs) ändert nicht die Tabs bereits in der Datei vorhanden ist, muss man tun :retab . Beispielsweise:

 :set et :retab 

und die Registerkarten in der Datei werden durch genügend Leerzeichen ersetzt. Registerkarten haben einfach Folgendes:

 :set noet :retab 

Während Sie den Einzug von Vim mit dem Einzug-Plugin oder manuell mit den 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 vornimmt . Verwenden Sie diesen Tipp , um Vindect noch effektiver zu machen. Als ich angefangen habe, Python-Dateien zu bearbeiten, die von anderen mit verschiedenen Einrückstilen erstellt wurden (Tab vs. Leerzeichen und Anzahl der Leerzeichen), war es unglaublich frustrierend. Aber Vindect zusammen mit dieser Einrückungsdatei

Empfehlen auch:

  • Pythonhelfer
  • python_match
  • python_ifold

Heute könntest du editorconfig ausprobieren, es gibt auch ein vim-Plugin dafür. Damit können Sie nicht nur die Einrückungsgröße in vim ändern, sondern in vielen anderen Editoren konsistente Kodierungsstile beibehalten.

Im Folgenden sehen Sie eine einfache Editor-Konfiguration, wie Sie sehen können, die Python-Dateien haben 4 Leerzeichen zum Einrücken, und Pug-Template-Dateien haben nur 2.

 # 4 space indentation for python files [*.py] indent_style = space indent_size = 4 # 2 space indentation for pug templates [*.pug] indent_size = 2 

Ich benutze ein Dienstprogramm, das ich in C geschrieben habe, namens autotab . Es analysiert die ersten paar tausend Zeilen einer Datei, die Sie laden, und bestimmt Werte für die Vim-Parameter shiftwidth , tabstop und expandtab .

Dies wird zum Beispiel mit gcc -O autotab.c -o autotab . statementen für die Integration mit Vim finden Sie oben im Kommentarkopf.

Autotab ist ziemlich clever, kann aber von Zeit zu Zeit durcheinander geraten, insbesondere dadurch, dass verschiedene Indentierungsstile inkonsistent beibehalten wurden.

Wenn eine Datei offensichtlich Registerkarten oder eine Kombination aus Tabulatoren und Leerzeichen zum Einrücken verwendet, ermittelt Autotab, welche Tabgröße verwendet wird, indem Faktoren wie die Ausrichtung interner Elemente über aufeinanderfolgende Zeilen, z. B. Kommentare, berücksichtigt werden.

Es funktioniert für eine Vielzahl von Programmiersprachen und ist errorsverzeihend für “Out-of-Band” -Elemente, die keine Inkrementinkremente befolgen, wie C-Vorverarbeitungsdirektiven, C-statementsbeschriftungen, ganz zu schweigen von den offensichtlichen Leerzeilen.