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?
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?
Antworten:
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 shiftwidth
Einstellung können Sie auch steuern, wie viele Leerzeichen eingerückt werden sollen.
shiftwidth
Einstellung erfahren Sie, wie Sie dies ändern können.
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 ". shiftwidth
ist 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 =iB
ist 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
>}
. Vielen Dank
Eine große Auswahl wäre:
gg=G
Es ist sehr schnell und alles wird eingerückt ;-)
gg=G
nur jede Zeile ab Position 1 gesetzt. Alle Leerzeichen wurden entfernt. Gibt es noch etwas Spezifisches für XML?
set cindent
sollte in vimrc sein oder laufen, :set cindent
bevor dieser Befehl ausgeführt wird
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.
Tastendruck für mehr visuelle Menschen:
Befehlsmodus aufrufen:
Escape
Bewegen Sie sich zum Anfang des Bereichs, um einzurücken:
hjkl↑↓←→
Starten Sie einen Block:
v
Bewegen Sie sich zum Ende des Bereichs, um Folgendes einzurücken:
hjkl↑↓←→
(Optional) Geben Sie die Anzahl der gewünschten Einrückungsstufen ein
0..9
Führen Sie den Einzug im Block aus:
>
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
n
Zeilen 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.
vim
, nicht vi
.
vim
, mit der als verknüpft wurde vi
?
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, ma
wo 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>
.
Gehen Sie zum Anfang des Textes
Neben den angebotenen Lösungen mache ich gerne einen Absatz nach dem anderen >}
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.
Angenommen, Sie verwenden 2 Leerzeichen, um Ihren Code einzurücken. Art:
:set shiftwidth=2
Dann:
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).
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:
'
.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.
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 ...
Mit dem norm i
Befehl 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
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 shiftwidth
oder verwenden möchten, set
und ist flexibel genug, um mit TABS, SPACES oder anderen Zeichen zu arbeiten.
-- VISUAL MODE --
:
, um zur Eingabeaufforderung zu wechselnErsetzen durch 3 führende Leerzeichen:
:'<,'>s/^/ /g
Oder durch führende Registerkarten ersetzen:
:'<,'>s/^/\t/g
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 Tab
am Anfang jeder Zeile innerhalb des gesamten Bereichs ein
Ich mag es, Text zum Einrücken zu markieren:
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 %.
:help left
In können ex mode
Sie Linien verwenden :left
oder :le
um einen bestimmten Betrag auszurichten. Insbesondere :left
werden Linien im [Bereich] nach links ausgerichtet. Es setzt den Einzug in den Zeilen auf [Einzug] (Standard 0).
:%le3
oder :%le 3
oder :%left3
oder :%left 3
richtet 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.
:le
ohne Wert oder :le 0
wird links mit einem Abstand von 0 ausgerichtet.
Dies funktioniert in Vim und gVim.
:'<,'>le4
die Leerzeichen einfügen. Vielen Dank!
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.
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.
Ich habe in den Kommentaren keine Methode gefunden, die ich verwende, also werde ich sie teilen (ich denke nur Vim):
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.
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:
.vimrc
Datei 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)
: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
:set number
um Toggle - Zeilennummern (sie sind weg von Standard), oder setzen Sie set number
in Ihrem vimrc.
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.
Option 1: Einen Codeblock in vi im Visual Block-Modus in drei Leerzeichen einrücken:
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.
In der Befehlszeile wird Folgendes angezeigt: :'<,'>
Um den Einzug auf drei Leerzeichen zu setzen, geben Sie ein le 3
und drücken Sie die Eingabetaste. Folgendes erscheint::'<,'>le 3
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:
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:
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.
Ich verwende die visuelle Auswahl im Blockmodus:
I
( Shift+ I), um den Einfügemodus aufzurufen.Dies ist kein Uni-Tasker. Es klappt:
c
anstelle von I
).vim-prettier
anstelle der Standard-Einrückungs-Engine). Die Verwendung >
wird ansonsten die von Prettier vorgenommene Formatierung auf königliche Weise verbessern.
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 .
So rücken Sie die gesamte Datei um vier ein:
esc 4G=G
Quelle: https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html