Frage Ziehen Sie mehrere Zeilen schnell in vi ein


Sollte trivial sein, und es könnte sogar in der Hilfe sein, aber ich kann nicht herausfinden, wie man es steuert. Wie kann ich mehrere Zeilen schnell in vi einrücken?


1968
2017-10-25 03:27


Ursprung


Antworten:


Benutze die > Befehl. Um 5 Zeilen einzurücken, 5>>. Um einen Block von Linien zu markieren und einzudrücken, Vjj> 3 Zeilen einrücken (nur vim). Um einen geschweiften Klammernblock einzurücken, setzen Sie den Cursor auf eine der geschweiften Klammern und verwenden Sie >%.

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

Auch der shiftwidth Mit dieser Einstellung können Sie steuern, wie viele Leerzeichen eingerückt werden sollen.


2321
2017-10-25 03:28



Diese Antwort fasst die anderen Antworten und Kommentare zu dieser Frage zusammen und fügt zusätzliche Informationen basierend auf der Vim Dokumentation und das Vim Wiki. Aus Gründen der Prägnanz unterscheidet diese Antwort nicht zwischen Vi- und Vim-spezifischen Befehlen.

In den folgenden Befehlen bedeutet "Neueinzug" "Einrückung von Zeilen entsprechend Ihrer Einrückungseinstellungen. " 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, z.B. =iB ist ein gültiger Blockeinzugsbefehl. Sieh dir das an "Ein Code-Block einrücken" Für ein schönes Beispiel, um diese Befehle auszuprobieren.

Denken Sie auch daran

.    Repeat last command

, so können Einrückbefehle einfach und bequem wiederholt werden.

Erneutes Einrücken kompletter Dateien

Eine andere häufige Situation besteht darin, dass der Einzug in einer Quelldatei korrigiert werden muss:

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 3 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 Bereich von Zeilen einrücken möchten, ohne Ihre zu verschieben Mauszeiger.

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

Einrücken mit Markern

Ein anderer Ansatz ist via Markierungen:

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

... den Cursor zum Ende der Position bewegen

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

Variablen, die den Einzug steuern

Sie können diese in Ihrem festlegen .vimrc Datei.

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 hat 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


886
2018-03-06 17:29



Eine große Auswahl wäre

gg=G

es ist wirklich schnell und alles wird eingerückt ;-)


116
2018-01-20 21:11



Probieren Sie dies auch für C-Einrückung Einrückung, do :help = Für mehr Information:

={

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

Oder nur:

==

um die aktuelle Zeile automatisch einzurücken.


105
2017-10-25 04:21



Key-Presses für mehr visuelle Menschen:

  1. Rufen Sie den Befehlsmodus auf:
    Flucht 

  2. Bewegen Sie sich zum Anfang des einzahnenden Bereichs:
    hjkl 

  3. Starte einen Block:
    v

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

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

  6. Führen Sie die Einrückung auf dem Block aus:
    >


73
2017-10-25 09:16



Zusätzlich zu der bereits gegebenen und akzeptierten Antwort ist es auch möglich, einen Marker zu platzieren und dann alles vom aktuellen Cursor auf den Marker zurückzusetzen. Also, geben Sie ein ma Wenn Sie den oberen Rand des eingerückten Blocks haben möchten, fahren Sie mit dem Cursor nach unten und tippen Sie ein >'a (beachten Sie, dass "a"kann für jeden gültigen Markernamen ersetzt werden. Dies ist manchmal einfacher als 5>> oder vjjj>.


62
2017-10-25 04:00



Der Meister aller Befehle ist
gg=G

Dies zieht die gesamte Datei ein!

Und unten finden Sie einige der einfachen und eleganten Befehle, mit denen Zeilen in Vim oder gVim schnell eingezogen werden können.

Um die aktuelle Zeile einzurücken
==

Einrücken aller Zeilen unter der aktuellen Zeile

=G

Einrücken n Zeilen unterhalb der aktuellen Zeile

n==

Um beispielsweise 4 Zeilen unterhalb der aktuellen Zeile einzuziehen

4==

Um einen Block Code einzufügen, gehen Sie zu einem der geschweiften Klammern und verwenden Sie den Befehl

=%

Dies sind die einfachsten und dennoch leistungsfähigsten Befehle zum Einrücken mehrerer Zeilen.


60
2018-04-18 18:41



Gehe zum Anfang des Textes

  • Drücken Sie v für den visuellen Modus.
  • benutzen oben/Nieder Pfeil zum Markieren von Text.
  • Drücken Sie = um alle hervorgehobenen Zeilen einzurücken.

29
2017-11-04 22:57



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


27
2017-10-25 04:08