Mehrere Zeilen schnell in vi einrücken

2158

Es sollte trivial sein und vielleicht sogar in der Hilfe enthalten sein, aber ich kann nicht herausfinden, wie ich es navigieren soll. Wie rücke ich mehrere Zeilen schnell in vi ein?

Allain Lalonde
quelle

Antworten:

2552

Verwenden Sie den >Befehl. Fünf Zeilen einrücken , 5>>. Um einen Zeilenblock zu markieren und einzurücken, Vjj>um drei Zeilen einzurücken (nur Vim). Um einen geschweiften Klammernblock einzurücken, setzen Sie den Cursor auf eine der geschweiften Klammern und verwenden Sie >%oder von einer beliebigen Stelle innerhalb des Blocks >iB.

Wenn Sie Textblöcke kopieren und den Einzug eines Blocks an seiner neuen Position ausrichten müssen, verwenden Sie ]pstatt nur p. Dadurch wird der eingefügte Block am umgebenden Text ausgerichtet.

Mit dieser shiftwidthEinstellung können Sie auch steuern, wie viele Leerzeichen eingerückt werden sollen.

Greg Hewgill
quelle
77
Ich benutze> i} (inneren {} Block einrücken). Funktioniert in vim. Ich bin mir nicht sicher, ob es in vi funktioniert.
R. Martinho Fernandes
11
Mein Problem (in gVim) ist, dass der Befehl> viel mehr als 2 Leerzeichen einrückt (ich möchte nur zwei Leerzeichen, aber> etwas wie 5 Leerzeichen
einrücken
28
@Kamran: In der shiftwidthEinstellung erfahren Sie, wie Sie dies ändern können.
Greg Hewgill
4
@ MattStevens: Eine ausführliche Diskussion über dieses Phänomen finden Sie hier: meta.stackexchange.com/questions/9731/…
Greg Hewgill
5
Ich rücke visuelle Blöcke oft mehrmals hintereinander ein, z. B. indem ich einige Tags korrigiere, die in eine XML-Datei eingefügt wurden. Anstatt den Block jedes Mal im visuellen Modus neu auszuwählen, kann man 'gv' verwenden, um den letzten visuellen Block wiederzuverwenden. Referenz superuser.com/questions/220666/…
David Mann
958

Diese Antwort fasst die anderen Antworten und Kommentare dieser Frage zusammen und fügt zusätzliche Informationen hinzu, die auf der Vim-Dokumentation und dem Vim-Wiki basieren . Aus Gründen der Übersichtlichkeit unterscheidet diese Antwort nicht zwischen Vi- und Vim-spezifischen Befehlen.

In den folgenden Befehlen bedeutet "erneutes Einrücken " "Zeilen entsprechend Ihren Einrückungseinstellungen einrücken ". shiftwidthist die primäre Variable, die den Einzug steuert.

Allgemeine Befehle

>>   Indent line by shiftwidth spaces
<<   De-indent line by shiftwidth spaces
5>>  Indent 5 lines
5==  Re-indent 5 lines

>%   Increase indent of a braced or bracketed block (place cursor on brace first)
=%   Reindent a braced or bracketed block (cursor on brace)
<%   Decrease indent of a braced or bracketed block (cursor on brace)
]p   Paste text, aligning indentation with surroundings

=i{  Re-indent the 'inner block', i.e. the contents of the block
=a{  Re-indent 'a block', i.e. block and containing braces
=2a{ Re-indent '2 blocks', i.e. this block and containing block

>i{  Increase inner block indent
<i{  Decrease inner block indent

Sie können ersetzen {mit }oder B, zum Beispiel =iBist ein gültiger Block indent Befehl. Schauen Sie sich "Codeblock einrücken" an, um ein schönes Beispiel für das Ausprobieren dieser Befehle zu erhalten.

Denken Sie auch daran

.    Repeat last command

So können Einrückungsbefehle einfach und bequem wiederholt werden.

Komplette Dateien erneut einrücken

Eine andere häufige Situation besteht darin, dass Einrückungen in einer Quelldatei behoben werden müssen:

gg=G  Re-indent entire buffer

Sie können diese Idee auf mehrere Dateien erweitern:

" Re-indent all your C source code:
:args *.c
:argdo normal gg=G
:wall

Oder mehrere Puffer:

" Re-indent all open buffers:
:bufdo normal gg=G:wall

Im visuellen Modus

Vjj> Visually mark and then indent three lines

Im Einfügemodus

Diese Befehle gelten für die aktuelle Zeile:

CTRL-t   insert indent at start of line
CTRL-d   remove indent at start of line
0 CTRL-d remove all indentation from line

Ex-Befehle

Diese sind nützlich, wenn Sie einen bestimmten Zeilenbereich einrücken möchten, ohne den Cursor zu bewegen.

:< and :> Given a range, apply indentation e.g.
:4,8>   indent lines 4 to 8, inclusive

Einrücken mit Markern

Ein anderer Ansatz ist über Marker :

ma     Mark top of block to indent as marker 'a'

... bewegen Sie den Cursor zum Endpunkt

>'a    Indent from marker 'a' to current location

Variablen, die den Einzug regeln

Sie können diese in Ihrer .vimrc-Datei festlegen .

set expandtab       "Use softtabstop spaces instead of tab characters for indentation
set shiftwidth=4    "Indent by 4 spaces when using >>, <<, == etc.
set softtabstop=4   "Indent by 4 spaces when pressing <TAB>

set autoindent      "Keep indentation from previous line
set smartindent     "Automatically inserts indentation in some cases
set cindent         "Like smartindent, but stricter and more customisable

Vim verfügt über eine intelligente Einrückung basierend auf dem Dateityp. Versuchen Sie, dies zu Ihrer .vimrc hinzuzufügen:

if has ("autocmd")
    " File type detection. Indent based on filetype. Recommended.
    filetype plugin indent on
endif

Verweise

ire_and_curses
quelle
13
Sowohl diese als auch die darüber liegende Antwort waren großartig. Aber ich habe dies getan, weil es mich an den Punktoperator erinnerte, der den letzten Befehl wiederholt. Dies ist äußerst nützlich, wenn Sie einen ganzen Block um mehrere Schaltbereiche (oder Einrückungen) einrücken müssen, ohne weiter drücken zu müssen >}. Vielen Dank
Amit
1
5 >> 5 Zeilen einrücken: Dieser Befehl rückt die fünfte Zeile ein, nicht 5 Zeilen. Könnte dies an meinen VIM-Einstellungen liegen oder ist Ihr Wortlaut falsch?
Wipqozn
1
@ Wipqozn - Das ist seltsam. Es rückt definitiv die nächsten fünf Zeilen für mich ein, die auf Vim 7.2.330 getestet wurden.
ire_and_curses
8
> 42gg ​​Einzug von wo Sie zu Linie 42 sind.
Steve
Tolle Zusammenfassung! Beachten Sie auch, dass der "Einzug innerhalb des Blocks" und "Alle Einzug einrücken" (<i {> a {usw.) auch mit Klammern und Klammern funktioniert:> a (<i] usw. (Und wenn ich schon dabei bin, in Zusätzlich zu <> arbeiten sie auch mit d, c, y usw.)
aqn

123

Eine große Auswahl wäre:

gg=G

Es ist sehr schnell und alles wird eingerückt ;-)


1
Ich habe eine XML-Datei und die Syntaxhervorhebung aktiviert. Beim Tippen wird gg=Gnur jede Zeile ab Position 1 gesetzt. Alle Leerzeichen wurden entfernt. Gibt es noch etwas Spezifisches für XML?
Asgs

2
Ich denke, set cindentsollte in vimrc sein oder laufen, :set cindentbevor dieser Befehl ausgeführt wird
Amanuel Nega

3
Ich denke, cindent muss zuerst gesetzt werden. und @asgs ich denke das funktioniert nur für cstyle programmiersprachen.
Amanuel Nega

110

Versuchen Sie dies auch für C- Einrückungen. Sind :help =für weitere Informationen:

={

Dadurch wird der aktuelle Codeblock, in dem Sie sich befinden, automatisch eingerückt.

Oder nur:

==

um die aktuelle Zeile automatisch einzurücken.


2
funktioniert bei mir nicht, setzt einfach meinen Cursor auf die Zeile über der öffnenden Klammer von 'dem aktuellen Codeblock, in dem ich mich befinde'.
underscore_d

79

Tastendruck für mehr visuelle Menschen:

  1. Befehlsmodus aufrufen:
    Escape

  2. Bewegen Sie sich zum Anfang des Bereichs, um einzurücken:
    hjkl

  3. Starten Sie einen Block:
    v

  4. Bewegen Sie sich zum Ende des Bereichs, um Folgendes einzurücken:
    hjkl

  5. (Optional) Geben Sie die Anzahl der gewünschten Einrückungsstufen ein
    0..9

  6. Führen Sie den Einzug im Block aus:
    >


2
Das ist großartig, aber es werden Leerzeichen und keine Tabulatoren verwendet. Gibt es eine Möglichkeit, dies zu beheben?
Shane Reustle

12
Wenn Leerzeichen anstelle von Tabulatoren verwendet werden, liegt dies wahrscheinlich daran, dass für die Einrückung Leerzeichen verwendet werden. =).
Kent Fredric

4
Wenn die Option 'expandtab' deaktiviert ist (dies ist die Standardeinstellung), verwendet Vim <Tab> s so oft wie möglich, um den Einzug zu erstellen. (: Hilfe:>)
Kent Fredric

1
Die einzige tab / space-bezogene vim-Einstellung, die ich geändert habe, ist: set tabstop = 3. Es wird tatsächlich jedes Mal eingefügt, wenn ich >>: "<tab> <space> <space>" verwende. Gleiches gilt für das Einrücken eines Blocks. Irgendwelche Ideen?
Shane Reustle

3
Die drei Einstellungen, die Sie für "Leerzeichen gegen Tabulatoren" suchen möchten, sind 1. Tabstop 2. Shiftwidth 3. expandtab. Sie haben wahrscheinlich "shiftwidth = 5 noexpandtab", also besteht ein "Tab" aus 3 Leerzeichen und eine Einrückungsstufe aus "5" Leerzeichen, sodass die 5 aus 1 Tabulator und 2 Leerzeichen besteht.
Kent Fredric

66

Der Meister aller Befehle ist
gg=G

Dies rückt die gesamte Datei ein!

Im Folgenden finden Sie einige der einfachen und eleganten Befehle zum schnellen Einrücken von Zeilen in Vim oder gVim.

Einrücken der aktuellen Zeile
==

Zum Einrücken aller Zeilen unterhalb der aktuellen Zeile

=G

nZeilen unterhalb der aktuellen Zeile einrücken

n==

Zum Beispiel, um 4 Zeilen unterhalb der aktuellen Zeile einzurücken

4==

Um einen Codeblock einzurücken, gehen Sie zu einer der geschweiften Klammern und verwenden Sie den Befehl

=%

Dies sind die einfachsten und dennoch leistungsstarken Befehle zum Einrücken mehrerer Zeilen.


3
Dies ist nur in vim, nicht vi.
Rojomoke

3
Nicht auf meinen Solaris- oder AIX-Boxen. Der Gleichheitsschlüssel war schon immer eine meiner Standard-Ad-hoc-Makrozuweisungen. Sind Sie sicher, dass Sie sich keine ansehen vim, mit der als verknüpft wurde vi?
Rojomoke

3
Ja, unter Linux ist vi fast immer eine Verbindung zu vim. Führen Sie den Befehl: ve in vi aus.
Rojomoke

4
Ich liebe diese Art von Antworten: klar, präzise und prägnant. Arbeitete für mich in Debian Jessie. Vielen Dank, @SJain
digitai

1
Da ich vim benutze, nicht vi, ziemlich aufgeregt, ist diese Antwort hier. Vielen Dank.
Dan Nissenbaum

66

Neben der bereits gegebenen Antwort und akzeptierten ist es auch möglich, einen Marker zu platzieren und dann alles vom aktuellen Cursor zum Marker einzurücken.

Geben Sie daher ein, mawo Sie den oberen Rand Ihres eingerückten Blocks haben möchten , bewegen Sie den Cursor so weit wie nötig nach unten und geben Sie dann ein >'a(beachten Sie, dass " a" für jeden gültigen Markernamen eingesetzt werden kann). Dies ist manchmal einfacher als 5>>oder vjjj>.


1
Das ist wirklich nützlich. Ich muss nachsehen, was damit alles funktioniert. Ich weiß d'a und y'a, was noch?
user606723

2
Dies ist sehr nützlich, da nicht gezählt werden muss, wie viele Zeilen Sie einrücken möchten.
Zicky

29

Gehen Sie zum Anfang des Textes

  • Drücken Sie vfür den visuellen Modus.
  • Verwenden Sie up/ downPfeil, um Text hervorzuheben.
  • Drücken Sie, =um alle markierten Zeilen einzurücken.

28

Neben den angebotenen Lösungen mache ich gerne einen Absatz nach dem anderen >}


2
Ja, und deshalb ist einer meiner großen Ärmel Leerzeichen in einer ansonsten leeren Zeile: Sie bringen Vims Vorstellung von einem "Absatz" durcheinander.
aqn

28

Wenn Sie einen Block auswählen und >zum Einrücken verwenden, kehrt dieser zum normalen Modus zurück. Ich habe dies in meiner .vimrc-Datei:

vnoremap < <gv

vnoremap > >gv

Sie können Ihre Auswahl so oft einrücken, wie Sie möchten.


17
Um die Auswahl mehrmals einzurücken, können Sie einfach drücken. um den vorherigen Befehl zu wiederholen.
Sundar - Monica

2
Das Problem mit. In dieser Situation müssen Sie Ihre Finger bewegen. Mit der Lösung von @ mike (die gleiche, die ich verwende) haben Sie bereits Ihre Finger auf der Einrückungstaste und können sie einfach weiter schlagen, um weiter einzurücken, anstatt zu wechseln und etwas anderes zu tun. Die Verwendung der Periode dauert länger, da Sie Ihre Hände bewegen müssen, und es erfordert mehr Gedanken, da es sich um eine zweite, andere Operation handelt.
Masukomi

21

Angenommen, Sie verwenden 2 Leerzeichen, um Ihren Code einzurücken. Art:

:set shiftwidth=2
  • Typ v(um den visuellen Blockbearbeitungsmodus aufzurufen)
  • Bewegen Sie den Cursor mit den Pfeiltasten (oder mit h/ j/ k/ l), um die Zeilen hervorzuheben, die Sie ein- oder einrücken möchten.

Dann:

  • Art > Sie einrücken einmal (2 Felder).
  • Art 2> Sie einrücken zweimal (4 Leerzeichen).
  • Geben Sie 3>einrücken dreimal (6 Leerzeichen).
  • ...
  • Geben Sie <zu unindent einmal (2 Felder).
  • Geben Sie 2<zweimal ausrücken (4 Leerzeichen).
  • Geben Sie 3<zu unindent dreimal (6 Räume).
  • ...

Du hast die Idee.

( Leere Zeilen werden nicht eingerückt, was ich sehr nett finde. )


Ich fand die Antwort in der (g) vim-Dokumentation zum Einrücken von Blöcken:

:help visual-block
/indent

Wenn Sie dem Befehl eine Zählung geben möchten, tun Sie dies kurz vor der Eingabe des Operatorzeichens: "v {move-around} 3>" (verschieben Sie die Zeilen 3 Einrückungen nach rechts).

John Sonderson
2
Ich würde sagen, dass vi / vim größtenteils konsistent ist. Zum Beispiel verhält sich D nicht wie S und Y! :)
aqn
1
Dies beginnt auf der linken Seite der Datei ... nicht an der aktuellen Position des Blocks
Eliethesaiyan
1
Genial, genau das, wonach ich gesucht habe (eine Möglichkeit, eine bestimmte Anzahl von Leerzeichen einzufügen - 4 Leerzeichen für Markdown-Code - um meinen normalen Einzug zu überschreiben). In meinem Fall wollte ich eine bestimmte Anzahl von Zeilen im visuellen Modus einrücken, also Shift-V, um die Zeilen hervorzuheben, und dann :'<,'>le4die Leerzeichen einfügen. Vielen Dank!
Subfuzion
1
Es gibt natürlich viele Möglichkeiten, dies zu lösen, aber dies ist am einfachsten zu implementieren, da Zeilennummern in vim standardmäßig angezeigt werden und keine Mathematik erforderlich ist.
HoldOffHunger
@HoldOffHunger Zeilennummern werden standardmäßig nicht angezeigt. Sie verwenden müssen , :set numberum Toggle - Zeilennummern (sie sind weg von Standard), oder setzen Sie set numberin Ihrem vimrc.
DryLabRebel
Dies ist umständlich, aber der richtige Weg, wenn Sie außerhalb von Core VIM formatieren (z. B. vim-prettieranstelle der Standard-Einrückungs-Engine). Die Verwendung >wird ansonsten die von Prettier vorgenommene Formatierung auf königliche Weise verbessern.
Oligofren
Komisch, ich finde es alles andere als umständlich. Dies ist kein Uni-Tasker! Das Erlernen dieser Methode hat viele Verwendungsmöglichkeiten, die über das Einrücken hinausgehen.
sqqqrly
Ich finde es besser als die akzeptierte Antwort, da ich sehen kann, was passiert, welche Zeilen ich auswähle und welche Aktion ich mache, und nicht nur eine Art Vim-Beschwörung tippe.
user4052054
3
...Was? 'um 4 Leerzeichen einrücken'? Nein, dies springt zu Zeile 4 und rückt dann alles von dort bis zum Ende der Datei ein, wobei der aktuell ausgewählte Einrückungsmodus (falls vorhanden) verwendet wird.
underscore_d
18

Das Schöne an der Benutzeroberfläche von Vim ist die Konsistenz. Bearbeitungsbefehle bestehen aus dem Befehl und einer Cursorbewegung. Die Cursorbewegungen sind immer gleich:

  • Hnach oben auf dem Bildschirm, Lnach unten, Min die Mitte
  • nG , um zur Zeile n zu gelangen , Gallein zum Ende der Datei, ggzum Anfang
  • num zum nächsten Suchmatch zu wechseln, Nzum vorherigen
  • } bis zum Ende des Absatzes
  • % zur nächsten passenden Klammer, entweder in Klammern oder in der Art des Tags
  • enter zur nächsten Zeile
  • 'xx markieren, wobei x ein Buchstabe oder ein anderer ist '.
  • viele weitere, einschließlich wund Wfür Wörter $oder 0für Spitzen der Linie usw., die hier nicht zutreffen, weil es sich nicht um Linienbewegungen handelt .

Um vim verwenden zu können, müssen Sie lernen, den Cursor zu bewegen und sich an ein Repertoire von Befehlen zu erinnern, z. B. >Einrücken (und)< Einrücken "Ausrücken").

So kann zum Einrücken der Linien von der Cursorposition bis zum oberen Rand des Bildschirms Sie tun >H, >Gauf dem Boden der Datei einrücken.

Wenn Sie anstatt zu >Htippen dH, löschen Sie denselben Zeilenblock, cHum ihn zu ersetzen usw.

Einige Cursorbewegungen passen besser zu bestimmten Befehlen. Insbesondere ist der %Befehl praktisch, um einen ganzen HTML- oder XML-Block einzurücken. Wenn in der Datei die Syntax hervorgehoben ist ( :syn on), setzen Sie den Cursor in den Text eines Tags (wie im "i" von <div> und geben Sie ein>% wird bis zum schließenden </ div> -Tag eingerückt.

So funktioniert Vim: Man muss sich nur die Cursorbewegungen und Befehle merken und wie man sie mischt. Meine Antwort auf diese Frage lautet also "Gehen Sie zu einem Ende des Zeilenblocks, den Sie einrücken möchten, und geben Sie dann den >Befehl und eine Bewegung zum anderen Ende des Blocks ein", wenn Einzug als Verschieben der Zeilen interpretiert wird, =wenn Einzug wird wie im hübschen Druck interpretiert.

Juan Lanus
quelle
2
Ich würde sagen, dass vi / vim größtenteils konsistent ist. Zum Beispiel verhält sich D nicht wie S und Y! :)
aqn
14

Mach das:

$vi .vimrc

Und fügen Sie diese Zeile hinzu:

autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent

Dies ist nur für eine CPP-Datei. Sie können dies für einen anderen Dateityp tun, indem Sie einfach den Dateityp ändern ...

pankaj ukumar
quelle
13

Mit dem norm iBefehl können Sie den angegebenen Text am Zeilenanfang einfügen. So fügen Sie 10 Leerzeichen vor den Zeilen 2-10 ein:

:2,10norm 10i 

Denken Sie daran, dass am Ende des Befehls ein Leerzeichen stehen muss - dies ist das Zeichen, das wir einfügen möchten. Wir können eine Zeile auch mit einem anderen Text einrücken, um beispielsweise jede Zeile in einer Datei mit fünf Unterstrichen einzurücken:

:%norm 5i_

Oder etwas noch ausgefalleneres:

:%norm 2i[ ]

Ein praktischeres Beispiel ist das Kommentieren von Bash / Python / etc-Code mit dem Zeichen #:

:1,20norm i#

Zum erneuten Einrücken verwenden xstatt i. So entfernen Sie beispielsweise die ersten 5 Zeichen aus jeder Zeile:

:%norm 5x
Nykakin
quelle
1
Dies beginnt auf der linken Seite der Datei ... nicht an der aktuellen Position des Blocks
Eliethesaiyan
12

Ein schneller Weg, dies mit zu tun VISUAL MODE verwendet den gleichen Prozess wie das Kommentieren eines Codeblocks.

Dies ist nützlich, wenn Sie Ihre Anweisungen nicht ändern shiftwidthoder verwenden möchten, setund ist flexibel genug, um mit TABS, SPACES oder anderen Zeichen zu arbeiten.

  1. Positionieren Sie den Cursor am Anfang des Blocks
  2. v zu wechseln -- VISUAL MODE --
  3. Wählen Sie den einzurückenden Text aus
  4. Geben Sie ein :, um zur Eingabeaufforderung zu wechseln
  5. Ersetzen durch 3 führende Leerzeichen:

    :'<,'>s/^/ /g

  6. Oder durch führende Registerkarten ersetzen:

    :'<,'>s/^/\t/g

  7. Kurze Erklärung:

    '<,'> - Innerhalb des visuell ausgewählten Bereichs

    s/^/ /g - Fügen Sie am Anfang jeder Zeile innerhalb des gesamten Bereichs 3 Leerzeichen ein

    (oder)

    s/^/\t/g- Fügen Sie Tabam Anfang jeder Zeile innerhalb des gesamten Bereichs ein

Eric Kigathi
quelle
12

>} oder >{ Einzug von der aktuellen Zeile bis zum nächsten Absatz

<}oder <{gleiches Einrücken

jash
quelle
11

Ich mag es, Text zum Einrücken zu markieren:

  1. Gehen Sie zum Anfang der Textzeile und geben Sie ein ma( aist das Etikett aus dem 'm'ark: es kann ein beliebiger Buchstabe sein)
  2. Gehe zur Endzeile des Textes und tippe mz(wieder zkönnte es ein beliebiger Buchstabe sein)
  3. :'a,'z>oder :'a,'z<wird ein- oder ausrücken (ist das ein Wort?)
  4. Voila! Der Text wird verschoben (leere Zeilen bleiben leer ohne Leerzeichen)

PS: Mit dieser :'a,'zTechnik können Sie einen Bereich für jede Operation (d, y, s /// usw.) markieren, in der Sie Linien, Zahlen oder verwenden können %.

SteveO
quelle
10

:help left

In können ex modeSie Linien verwenden :leftoder :leum einen bestimmten Betrag auszurichten. Insbesondere :leftwerden Linien im [Bereich] nach links ausgerichtet. Es setzt den Einzug in den Zeilen auf [Einzug] (Standard 0).

:%le3oder :%le 3 oder :%left3oder :%left 3richtet die gesamte Datei durch Auffüllen mit drei Leerzeichen aus.

:5,7 le 3 richtet die Linien 5 bis 7 aus, indem sie mit drei Leerzeichen aufgefüllt werden.

:leohne Wert oder :le 0wird links mit einem Abstand von 0 ausgerichtet.

Dies funktioniert in Vim und gVim.

Zundarz
quelle
1
Genial, genau das, wonach ich gesucht habe (eine Möglichkeit, eine bestimmte Anzahl von Leerzeichen einzufügen - 4 Leerzeichen für Markdown-Code - um meinen normalen Einzug zu überschreiben). In meinem Fall wollte ich eine bestimmte Anzahl von Zeilen im visuellen Modus einrücken, also Shift-V, um die Zeilen hervorzuheben, und dann :'<,'>le4die Leerzeichen einfügen. Vielen Dank!
Subfuzion
9

Für mich war die MacVim (Visual) -Lösung, wählen Sie mit der Maus und drücken Sie ">", aber nachdem Sie die folgenden Zeilen in "~ / .vimrc" eingefügt haben, da ich Leerzeichen anstelle von Tabulatoren mag:

set expandtab
set tabstop=2
set shiftwidth=2

Es ist auch nützlich, MacVim über die Befehlszeile (Terminal.app) aufrufen zu können. Da ich also das folgende Hilfsverzeichnis "~ / bin" habe, platziere ich ein Skript namens "macvim":

#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@

Und natürlich in "~ / .bashrc":

export PATH=$PATH:$HOME/bin

MacPorts spielt viel mit "~ / .profile", so dass die Umgebungsvariable PATH ziemlich lang werden kann.

mda
quelle
9

5== wird fünf Zeilen von der aktuellen Cursorposition einrücken.

Sie können also vorher eine beliebige Nummer eingeben ==. Die Anzahl der Zeilen wird eingerückt. Dies ist im Befehlsmodus.

gg=G wird die gesamte Datei von oben nach unten einrücken.

rohitkadam19
quelle
9

Ich habe in den Kommentaren keine Methode gefunden, die ich verwende, also werde ich sie teilen (ich denke nur Vim):

  1. Esc Befehlsmodus aufrufen
  2. Gehen Sie zum ersten Zeichen der letzten Zeile, die Sie einrücken möchten
  3. Ctrl+ Vum die Blockauswahl zu starten
  4. Gehen Sie zum ersten Zeichen der ersten Zeile, die Sie einrücken möchten
  5. Shift+ I, um den speziellen Einfügemodus aufzurufen
  6. Geben Sie so viele Leerzeichen / Tabulatoren ein, wie Sie einrücken möchten (z. B. zwei)
  7. Drücken Sie Escund Leerzeichen werden in allen Zeilen angezeigt

Dies ist nützlich, wenn Sie die Einstellungen für Einrückungen / Registerkarten in nicht ändern möchten vimrc oder sich daran erinnern sie diese während der Bearbeitung ändern.

Zum Einrücken verwende ich den gleichen Ctrl+ VBlock, um Leerzeichen auszuwählen und mit zu löschen D.

NickSoft
quelle
9

Ich weiß nicht, warum es so schwierig ist, eine einfache Antwort wie diese zu finden ...

Ich selbst musste viel kämpfen, um das zu wissen. Es ist sehr einfach:

  • Bearbeiten Sie Ihre .vimrcDatei im Home-Verzeichnis.
  • Fügen Sie diese Zeile hinzu

    set cindent
    

    in Ihrer Datei, in der Sie richtig einrücken möchten.

  • Im Normal- / Befehlsmodus eingeben

    10==   (This will indent 10 lines from the current cursor location)
    gg=G   (Complete file will be properly indented)
    
Kamlesh Karwande
quelle
8
:line_num_start,line_num_end>

Zum Beispiel,

14,21> shifts line number 14 to 21 to one tab

Erhöhen Sie das Symbol '>' für weitere Registerkarten.

Zum Beispiel,

14,21>>> for three tabs
attaboyabhipro
quelle
1
Es gibt natürlich viele Möglichkeiten, dies zu lösen, aber dies ist am einfachsten zu implementieren, da Zeilennummern in vim standardmäßig angezeigt werden und keine Mathematik erforderlich ist.
HoldOffHunger
@HoldOffHunger Zeilennummern werden standardmäßig nicht angezeigt. Sie verwenden müssen , :set numberum Toggle - Zeilennummern (sie sind weg von Standard), oder setzen Sie set numberin Ihrem vimrc.
DryLabRebel
7

Wenn ich Python häufig benutze, muss ich häufig Blöcke um mehr als einen Einzug verschieben. Sie können dies tun, indem Sie eine der Blockauswahlmethoden verwenden und dann einfach die Anzahl der Einrückungen eingeben, die Sie direkt vor dem springen möchten>

Zum Beispiel V5j3>werden fünf Zeilen dreimal eingerückt - das sind 12 Leerzeichen, wenn Sie vier Leerzeichen für Einrückungen verwenden.

John La Rooy
quelle
7

Um jede Zeile in einem Dateityp einzurücken, Escund dann G=gg.

kapil
quelle
6

So rücken Sie markierten Code in vi sofort um mehrere Leerzeichen ein:

Option 1: Einen Codeblock in vi im Visual Block-Modus in drei Leerzeichen einrücken:

  1. Wählen Sie den Codeblock aus, den Sie einrücken möchten. Verwenden Sie dazu den Ctrl+Vnormalen Modus und den Pfeil nach unten, um Text auszuwählen. :Geben Sie bei Auswahl diesen Befehl ein, um dem Block des ausgewählten Texts einen Befehl zu erteilen.

  2. In der Befehlszeile wird Folgendes angezeigt: :'<,'>

  3. Um den Einzug auf drei Leerzeichen zu setzen, geben Sie ein le 3und drücken Sie die Eingabetaste. Folgendes erscheint::'<,'>le 3

  4. Der ausgewählte Text wird sofort in drei Leerzeichen eingerückt.

Option 2: Einen Codeblock in vi im Visual Line-Modus in drei Leerzeichen einrücken:

  1. Öffnen Sie Ihre Datei in vi.
  2. Bewegen Sie den Mauszeiger über einen Code
  3. Seien Sie im normalen Modus und drücken Sie die folgenden Tasten:

    Vjjjj:le 3
    

    Interpretation dessen, was Sie getan haben:

    V bedeutet, Text auszuwählen.

    jjjj Pfeile vier Zeilen nach unten, wobei vier Zeilen hervorgehoben werden.

    : teilt vi mit, dass Sie eine Anweisung für den hervorgehobenen Text eingeben werden.

    le 3 bedeutet, dass hervorgehobener Text drei Zeilen eingerückt wird.

    Der ausgewählte Code wird sofort auf drei Leerzeichen erhöht oder verringert.

Option 3: Verwenden Sie den Visual Block-Modus und den speziellen Einfügemodus, um den Einzug zu erhöhen:

  1. Öffnen Sie Ihre Datei in vi.
  2. Bewegen Sie den Mauszeiger über einen Code
  3. Im normalen Modus die folgenden Tasten drücken:

    Ctrl+V

    jjjj
    

    (Drücken Sie fünfmal die Leertaste)

    Esc Shift+i

    Der gesamte hervorgehobene Text wird um weitere fünf Leerzeichen eingerückt.

Eric Leschinski
quelle
6

Ich verwende die visuelle Auswahl im Blockmodus:

  • Gehen Sie zur Vorderseite des Blocks, um sich zu bewegen (oben oder unten).
  • Drücken Sie Ctrl+ V, um den visuellen Blockmodus aufzurufen.
  • Navigieren Sie, um eine Spalte vor den Zeilen auszuwählen.
  • Drücken Sie I( Shift+ I), um den Einfügemodus aufzurufen.
  • Geben Sie einige Leerzeichen ein.
  • Drücken Sie Esc. Alle Zeilen werden verschoben.

Dies ist kein Uni-Tasker. Es klappt:

  • In der Mitte der Zeilen.
  • Einfügen einer beliebigen Zeichenfolge in alle Zeilen.
  • So ändern Sie eine Spalte (verwenden Sie canstelle von I).
  • reißen, löschen, ersetzen, etc ...
sqqqrly
quelle
Dies ist umständlich, aber der richtige Weg, wenn Sie außerhalb von Core VIM formatieren (z. B. vim-prettieranstelle der Standard-Einrückungs-Engine). Die Verwendung >wird ansonsten die von Prettier vorgenommene Formatierung auf königliche Weise verbessern.
Oligofren
Komisch, ich finde es alles andere als umständlich. Dies ist kein Uni-Tasker! Das Erlernen dieser Methode hat viele Verwendungsmöglichkeiten, die über das Einrücken hinausgehen.
sqqqrly
Ich finde es besser als die akzeptierte Antwort, da ich sehen kann, was passiert, welche Zeilen ich auswähle und welche Aktion ich mache, und nicht nur eine Art Vim-Beschwörung tippe.
user4052054
5
  • Für einen Codeblock {}: =+%

  • Für eine ausgewählte Zeile: Shift+ vWählen Sie mit den Aufwärts- / Abwärtspfeiltasten und drücken Sie dann =.

  • Für die gesamte Datei: gg+ =+G

Hinweis: 'gg' bedeutet, dass Sie zu Zeile 1 gehen, '=' der Einrückungsbefehl ist und 'G' den Cursor an das Ende der Datei bewegt .

Kulamani
quelle
4

So rücken Sie die gesamte Datei um vier ein:

esc 4G=G
Michael
quelle
3
...Was? 'um 4 Leerzeichen einrücken'? Nein, dies springt zu Zeile 4 und rückt dann alles von dort bis zum Ende der Datei ein, wobei der aktuell ausgewählte Einrückungsmodus (falls vorhanden) verwendet wird.
underscore_d