Wie kann ich dafür sorgen, dass die automatische Anzeige von vim keine nachgestellten Leerzeichen löscht?

7

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

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

Während andere den Codierungsstandard erfüllen, bei dem nachgestellte Leerzeichen (auch in Leerzeilen) nicht zulässig sind:

if (code) {

....|
}

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

if (code) {
|
....
}

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

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

Joey Adams
quelle
2
Meine erste Reaktion ist, dass Sie es falsch machen. Durch Weglassen Leerzeilen wie eingekerbt , dass Sie die Möglichkeit , töten zu verwenden , {oder }(zB d{etc).
Hlovdal

Antworten:

3

In diesem Hinweis im vimWiki erfahren Sie, wie Sie auch bei Leerzeilen korrekte Einrückungen erzielen. Wenn Sie nur den vorherigen Einzug beibehalten möchten (ohne vimden korrekten Einzug zu berücksichtigen), verwenden Sie ihn let ind = indent(prevnonblank(v:lnum - 1))wie in einem Kommentar unter demselben Wiki-Eintrag erläutert.

Benjamin Bannier
quelle
1

Ich habe festgestellt, dass diese Lösung für mich funktioniert:

:inoremap <Return> <Space><BS><Return>
Xiong Chiamiov
quelle
1
Dies sieht aus wie ein Hack / Workaround. Gibt es nicht eine geeignete Option, um dieses Verhalten der "nicht eingerückten leeren Zeile" auszuschalten?
Doub
Nicht dass ich wüsste - sonst hätte ich es hier gepostet.
Xiong Chiamiov
0

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>
Tom Hale
quelle