Wie lasse ich vims Autoindent hinterstehende Leerzeichen nicht fallen?

2338
Joey Adams

Wenn in einigen Texteditoren (z. B. Kate, gedit) der automatische Einzug aktiviert ist, wird durch zweimaliges Drücken der Eingabetaste ein nachlaufender Leerraum (den ich möchte) hinterlassen:

if (code) { .... ....| } 

Während andere auf den Kodierungsstandard abzielen, wo nachgestellte Leerzeichen (auch in leeren Zeilen) nicht zulässig sind:

if (code) {  ....| } 

Was mich darüber ärgert, ist, dass, wenn ich nach dem automatischen Einrücken nach oben gehe, der automatische Einzug verloren geht:

if (code) { | .... } 

Wenn ich vim und laufe :set autoindent, bekomme ich das letztere Verhalten.

Meine Frage ist, wie kann ich vim so einstellen, dass die nachgestellten Leerzeichen beibehalten werden, anstatt sie automatisch zu entfernen, wenn sie nicht verwendet werden?

7
Meine erste Reaktion ist, dass Sie es falsch machen. Indem Sie leere Zeilen auf diese Weise eingerückt lassen, beenden Sie die Möglichkeit, `{` oder `}` zu verwenden (z. B. `d {` usw.). hlovdal vor 13 Jahren 2

3 Antworten auf die Frage

3
Benjamin Bannier

Sehen Sie diesen Hinweis auf das vimWiki für wie richtig inden haben, auch für leere Zeilen. Wenn Sie nur den vorherigen Einzug beibehalten möchten (ignorieren Sie, was vimals korrekter Einzug berechnet wird), verwenden Sie den let ind = indent(prevnonblank(v:lnum - 1))Kommentar in einem Kommentar unter demselben Wiki-Eintrag.

1
Xiong Chiamiov

Ich habe diese Lösung gefunden, um für mich zu arbeiten:

:inoremap <Return> <Space><BS><Return> 
Das sieht nach einem Hack / Workaround aus. Gibt es nicht eine geeignete Option, um das Verhalten der "unbeeinträchtigten Leerzeile" zu deaktivieren? Doub vor 12 Jahren 1
Nicht das ich wüsste - sonst hätte ich es hier gepostet. Xiong Chiamiov vor 11 Jahren 0
0
Tom Hale

In meiner .vimrc:

" Change a blank line upon creation so that its leading spaces won't be removed inoremap <Return> <Return><Space><BS> nnoremap o o<Space><BS> nnoremap O O<Space><BS>