Von Zeit zu Zeit muss ich mit Code arbeiten, der nicht bis zur Einrückungsstufe eingerückt ist, auf die ich Vim eingerichtet habe (4 Leerzeichen pro Ebene), normalerweise nachdem ich etwas in die Datei kopiert / eingefügt habe. Normalerweise komme ich mit <<
und aus >>
. Das Problem ist, dass sie nicht zur nächsten Einrückungsstufe springen, sondern nur 4 Leerzeichen addieren oder subtrahieren.
Wenn ich solchen Code habe
if condition:
do this
do that
Tun >>
auf do that
führt zu
if condition:
do this
do that
Ich möchte, dass es dazu geht
if condition:
do this
do that
Abgesehen davon, dass die Einrückung der obigen Zeile leicht übereinstimmt, möchte ich, dass sie zur nächsten Einrückungsstufe springt und keine 4 Leerzeichen hinzufügt.
Dies ist, was ich in meinem .vimrc in Bezug auf Einrückungen habe
:set tabstop=4 shiftwidth=4 expandtab
indentation
Dumitru
quelle
quelle
filetype plugin indent on
in Ihrem.vimrc
, Dateityp (und Plugin) Einzug bezogene Regeln gelten. Überprüfen Sie beim Bearbeiten, was Ihrtabstop
Wert tatsächlich ist (set tabstop?
dies gilt auch für die anderen Einstellungen), und ändern Sie diese Werte, indem Sie Ihre Zeile zu einer After-Datei hinzufügen, z.>>
und<<
fügen Sie jeweils Einrückungen hinzu und entfernen Sie sie, was nicht das ist, was Sie wollen. Was Sie wollen, ist "Formatierung", mit der fertig ist==
.:nnoremap >> ^i<tab><esc>
wenn Sie wirklich Tab-Verhalten auf>>
==
springt auf die Ebene der obigen Zeile. Während eine gute Sache , zu wissen, es würde ich nicht Arbeit in allen Fällen habe Interesse an. Als Ergänzung zu der Frage, was ich will , ist für>>
und<<
einrücken / Dedent in dieser Richtung zum nächsten Vielfachen von Einrückungstiefe von der Grenze nach oben .==
verwendet entwederequalexpr
oder,equalprg
um die angegebenen Zeilen neu zu formatieren.Antworten:
Wenn Sie einen der Befehle verwenden
{count}>>
,{count}<<
,>{motion}
oder<{motion}
auf einigen Linien , die bereits eingezogen worden sind, und Sie wollen , dass ihre neue Einrückungsebene ein Vielfaches Ihres sein'shiftwidth'
Optionswert, können Sie die'shiftround'
Freigabeoption, und diese Zeile in Ihrer hinzufügenvimrc
:quelle
Wenn Sie immer
>>
zum nächsten Tabstop einrücken und<<
zum letzten Tabstop löschen möchten, können Sie sie wie folgt neu binden:Dadurch wird der Cursor bewegt, aber Sie könnten wahrscheinlich einige Markierungs-Tricks ausführen, um ihn zurück zu bewegen.
^
hinterlässt keinem'
Spuren, aber Sie können eine manuell in der Bindung hinterlassen.quelle