Mit >> in die nächste Einrückungsstufe einrücken


9

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 thatfü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

Wenn auch Sie haben filetype plugin indent onin Ihrem .vimrc, Dateityp (und Plugin) Einzug bezogene Regeln gelten. Überprüfen Sie beim Bearbeiten, was Ihr tabstopWert 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.
B

3
>>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 ==.
Romainl

könnte auch zuordnen, :nnoremap >> ^i<tab><esc>wenn Sie wirklich Tab-Verhalten auf>>
Wolfie

@romainl ==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 .
Dumitru

2
Nein, ==verwendet entweder equalexproder, equalprgum die angegebenen Zeilen neu zu formatieren.
Romainl

Antworten:


12

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ügen vimrc:

set shiftround

2

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:

:nnoremap << ^i<BS><esc>
:nnoremap >> ^i<tab><esc>

Dadurch wird der Cursor bewegt, aber Sie könnten wahrscheinlich einige Markierungs-Tricks ausführen, um ihn zurück zu bewegen. ^hinterlässt keine m'Spuren, aber Sie können eine manuell in der Bindung hinterlassen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.