Fügen Sie Registerkarten im INSERT-Modus ein, wenn expandtab festgelegt ist

12

Ich habe expandtabin meiner .vimrcDatei festgelegt, dass tabin mehrere spaceZeichen konvertiert werden soll . Einige Dateien (wie Makefile) benötigen jedoch das tatsächlich tabeingefügte Zeichen.

Gibt es eine einfache Möglichkeit, das Einfügen tabwährend des Tippens zu erzwingen ?

ztik
quelle

Antworten:

27

Anstatt nur zu drücken Tab, drücken Sie zuerst Ctrl-Vund dann Tab.

Dies kann verwendet werden, um eine Vielzahl von Sonderzeichen einzufügen. Siehe :help i_CTRL-Vfür Details.

Ctrl-VFunktioniert auch im Befehlszeilenmodus ( :help c-CTRL-V) und sogar in einigen anderen Programmen vollständig. (zB Bash, Mutt.)

Wenn Sie Ctrl-Vetwas anderem zugeordnet sind, versuchen Sie es Ctrl-Q. Dies hat in Vim den gleichen Effekt wie in Ctrl-V, aber einige Terminals verwenden es für den Steuerungsfluss. In diesem Fall wird Vim es nie sehen.

Reich
quelle
5
Oder <c-v>009im Falle einer kaputten Tabulatortaste oder eines Hardcore-ASCII-Puristen :-)
Martin Tournoij
17

Anstatt Ihr Verhalten zu ändern (was fehleranfällig ist).
Ich würde vim so einrichten, dass es sich für diesen Dateityp anders verhält.

Bei meiner normalen Bearbeitung erweitere ich die Registerkarten. Aber speziell für makeDateien habe ich das noexpandtabso eingestellt, dass Tabs erhalten bleiben.

Fügen Sie Ihrer ~ / .vimrc-Datei Folgendes hinzu:

" Normal action
set expandtab

if has("autocmd")

    " If the filetype is Makefile then we need to use tabs
    " So do not expand tabs into space.
    autocmd FileType make   set noexpandtab

endif
Martin York
quelle
3
Ich habe seine Frage beantwortet, aber Sie haben tatsächlich herausgefunden, was das zugrunde liegende Problem ist, viel besser als ich. Gut gemacht.
Rich
Ich denke, beide Antworten sind wertvoll. Weil Sie manchmal an einem entfernten Ort angemeldet sind und sich nicht mit der vim-Konfiguration anlegen möchten, sondern nur schnell ein Makefile bearbeiten möchten.
Daniel Schmitz