Frage

Sollte trivial sein, und es könnte sogar in die Hilfe, aber ich kann nicht herausfinden, wie zu navigieren.Wie kann ich Einrücken mehrerer Zeilen schnell in vi?

War es hilfreich?

Lösung

Mit dem > Befehl. Einrücken 5 Zeilen, 5 > > . Um einen Block von Linien zu markieren und Einzug es, V j j > einrücken 3 Zeilen (vim nur) . Einrücken ein krauses Klammern blockieren, setzen Sie den Cursor auf einem der geschweiften Klammern und mit > % oder von einem beliebigen Stelle im Block Verwendung > < kbd> i B .

Wenn Sie Textblöcke kopieren um und müssen den Einzug eines Blocks in seiner neuen Position auszurichten, verwenden Sie ] p statt nur p . Dies richtet den eingefügten Block mit dem umgebenden Text.

Auch die shiftwidth Einstellung ermöglicht es Ihnen, wie viele Räume zu steuern einrücken zu.

Andere Tipps

Diese Antwort fasst die anderen Antworten und Kommentare dieser Frage, und fügt zusätzliche Informationen auf der Grundlage der Vim Dokumentation und die Vim Wiki . Für Prägnanz, diese Antwort nicht zwischen Vi und Vim spezifische Befehle.

In den folgenden Befehlen wird "re-indent" bedeutet „indent Linien nach Ihren Einzug Einstellungen “. shiftwidth ist die primäre Variable, die Einrückung 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 { mit } oder B ersetzen, z.B. =iB ein gültiger Block Einrückung Befehl. Schauen Sie sich auf „einrücken ein Codeblock“ für ein schönes Beispiel diese Befehle heraus zu versuchen.

Beachten Sie auch, dass

.    Repeat last command

, so Einbuchtung Befehle lassen sich einfach und bequem wiederholt.

Re-Einrücken komplette Dateien

Eine weitere häufige Situation Einbuchtung erfordert während einer Quelldatei festgelegt werden:

gg=G  Re-indent entire buffer

Sie können diese Idee, um 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

In Visual Mode

Vjj> Visually mark and then indent 3 lines

Im Insert-Modus

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 sich zu bewegen Ihre Cursor.

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

Einrücken mit Markern

Ein weiterer Ansatz ist über Marker :

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

... bewegen Cursor auf Endstelle

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

Variablen, die Vertiefung

regieren

Sie können diese in Ihrer .vimrc Datei gesetzt.

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 intelligenter Einzug basierend auf Dateityp. Versuchen Sie, diese zu Ihrem .vimrc:

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

Referenzen

Eine große Auswahl wäre:

gg=G

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

Versuchen Sie auch diese für C-Einrücken Einbuchtung, tun :help = für weitere Informationen:

={

Das wird auto-indent der aktuelle Codeblock du bist in.

Oder einfach:

==

, um Auto-indent die aktuelle Zeile.

Schlüssel-Pressen für mehr seh-Leute:

  1. Geben Sie Befehl-Modus:
    Escape

  2. Bewegen an den Anfang der Gegend zum Einzug:
    hjkl

  3. Starten Sie einen block:
    v

  4. Bewegen an das Ende des Bereichs an, der Gedankenstrich:
    hjkl

  5. (Optional) Geben Sie die Anzahl der Einzug Ebenen, die Sie wollen
    0..9

  6. Führen Sie die Aussparung an den block:
    >

Neben der Antwort bereits gegeben und akzeptierte, ist es auch möglich, einen Marker zu platzieren und dann Einzug alles von den aktuellen Cursor auf die Markierung. So geben Sie ma, wo Sie die Spitze Ihres eingekerbten Block wollen, Cursor nach unten so weit wie Sie benötigen und geben Sie dann >'a (beachten Sie, dass „a“ kann für jeden gültigen Markierungsnamen ersetzt werden). Das ist manchmal einfacher als 5>> oder vjjj>.

Der Meister aller Befehle ist
gg=G

Diese Rückt die gesamte Datei!

Und unten sind einige der einfachen und eleganten Befehle einrücken Linien schnell in Vim oder gVim verwendet.

die aktuelle Zeile einzurücken
==

Um die alle Zeilen unter der aktuellen Zeile einrücken

=G

Um indent n Zeilen unter der aktuellen Zeile

n==

Zum Beispiel einrücken 4 Zeilen unter der aktuellen Zeile

4==

Um einen Code-Block einrücken, gehen Sie auf eine der Klammern und Befehl

=%

Dies sind die einfachste, aber leistungsfähige Befehle über mehrere Zeilen einrücken.

Gehen Sie

an den Anfang des Textes

  • drücken Sie v zur visuellen Modus.
  • Verwendung bis / unten Pfeil Text zu markieren.
  • drücken Sie = alle Zeilen einrücken Sie markiert.

Neben den angebotenen Lösungen, Ich mag Dinge, einen Absatz zu einem Zeitpunkt mit >} tun

Wenn Sie einen Block auswählen und mit > einrücken, Einzüge geht es dann zurück in den normalen Modus. Ich habe dies in meiner .vimrc-Datei:

vnoremap < <gv

vnoremap > >gv

Damit können Sie Ihre Auswahl so oft einrücken, wie Sie wollen.

Angenommen, Sie zwei Leerzeichen verwenden Sie den Code einrücken. Typ:

:set shiftwidth=2
  • Geben Sie v
  • (visual Block Bearbeitungsmodus zu wechseln)
  • Bewegen Sie den Cursor mit den Pfeiltasten (oder mit h / j / k / l ) zu markieren Sie die Linien wollen Sie oder unindent einrücken.

Dann:

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

Sie erhalten die Idee.

( Leere Zeilen werden nicht eingekerbten bekommen, was ich denke, ganz nett ist. )


fand ich die Antwort in der (g) vim Dokumentation für Einrücken Blöcke:

:help visual-block
/indent
  

Wenn Sie einen Zähler auf den Befehl geben wollen, tun dies nur vor der Eingabe   die Bedienungsperson Zeichen: "v {Move-around} 3>" (move Linien 3 Einzüge   rechts).

Die Schönheit UI von vim ist, dass es im Einklang ist. Bearbeitungsbefehle werden aus dem Befehl und eine Cursor-Bewegung gemacht. Der Cursor bewegt sich immer gleich:

  • H , um oben auf dem Bildschirm, L nach unten M bis mittleren
  • n G , um die Zeile n gehen, G allein zur Unterseite der Datei, g g nach oben
  • n zum nächsten Suchspiel zu bewegen, N zur vorherigen
  • } bis Ende des Absatzes
  • % zum nächsten passenden Klammer, eine der beiden Klammern oder dem Tag Art
  • eingeben , um die nächste Zeile
  • ' x x markieren, wo x ein Buchstabe oder eine andere'
  • viele mehr, darunter w und W für Wort, $ oder 0 , um Spitzen der Linie, usw., die, weil hier nicht gelten, sind nicht line Bewegungen.

Also, um vim zu verwenden Sie den Cursor und erinnern ein Repertoire von Befehlen wie zum Beispiel > einrücken (und <, um zu lernen, sich zu bewegen "Ausrücken").
So kann zum Einrücken der Linien von der Cursorposition bis zum oberen Rand des Bildschirms Sie tun > H , > G zum Ende der Datei einrücken.

Wenn anstelle der Eingabe > H , Sie geben d H dann löschen Sie die gleichen Block von Linien, c H zum ersetzen es, etc.

Einige Cursorbewegungen passen besser mit bestimmten Befehlen. Insbesondere die % Befehl ist praktisch eine ganze HTML oder XML-Block einrücken.
Wenn die Datei Syntax hervorgehoben hat (:syn on) Setzen Sie den Cursor in den Text eines Tags (wie in der "i" von

und Eingabe von > % wird einrücken bis zum Schließen
Tag.

Dies ist, wie vim funktioniert: man nur die Cursor-Bewegungen und die Befehle zu erinnern hat, und wie sie mischen
. So würde meine Antwort auf diese Frage „zu einem Ende des Blocks der Linien gehen Sie einrücken möchten, und geben Sie dann die > Befehl und eine Bewegung mit dem anderen Ende des Blocks“, wenn Spiegelstrich als Verschieben der Zeilen interpretiert, = , wenn Spiegelstrich wie in ziemlich Druck interpretiert wird.

Sie hierzu

$vi .vimrc

und fügen Sie diese Zeile

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

Dies ist nur für CPP-Datei, die Sie dies für einen anderen Dateityp tun können, auch nur durch den Dateityp zu modifizieren ...

Eine schnelle Möglichkeit, dies mit VISUAL MODE zu tun, verwendet den gleichen Prozess wie einen Codeblock zu kommentieren.

Dies ist nützlich, wenn Sie es vorziehen würde nicht Ihre shiftwidth zu verändern oder set Richtlinien verwenden und ist flexibel genug, um mit Tabulatoren oder Leerzeichen oder andere Zeichen zu arbeiten.

  1. Position Cursor am Anfang auf dem Block
  2. v wechseln -- VISUAL MODE --
  3. Wählen Sie den Text zu zerklüftet werden
  4. Typ : auf die Eingabeaufforderung
  5. wechseln
  6. Ersetzen mit 3 führenden Leerzeichen:

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

  7. oder Ersetzen mit führenden Registerkarten:

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

  8. Kurze Erläuterung:

    '<,'> - Im Visuell Ausgewählte Bereich

    s/^/ /g - Legen Sie 3 Leerzeichen am Anfang jeder Zeile innerhalb des gesamten Bereichs

    (oder)

    s/^/\t/g - Insert Tab am Anfang jeder Zeile innerhalb des gesamten Bereichs

Ich mag Text für Einrückungen markieren:

  1. gehen zu Beginn der Textzeile geben Sie dann ma (a ist das Etikett von der ‚m'ark: es könnte jeder Buchstabe sein)
  2. zur Endlinie von Text und Art mz (wieder z könnte jeder Buchstabe sein)
  3. : 'a,' z> oder: 'a,' z
  4. Voila! der Text bewegt wird (leere Zeilen ohne Leerzeichen leer bleiben)

PS: kann man verwenden: 'a', z einen Bereich für jede Operation zu markieren Technik (d, y, s ///, usw.), wo man Linien verwenden könnte, Zahlen oder%

>} oder >{ Gedankenstrich von den aktuellen Zeile bis zum nächsten Absatz

oder <} <{ gleiches un-indent

Es gibt eine weitere Möglichkeit, die bisher noch nicht erwähnt wird - Sie norm i Befehl verwendet werden können gegebenen Text am Anfang der Zeile einzufügen. So fügen Sie 10 Felder vor Zeilen 2-10:

:2,10norm 10i 

Denken Sie daran, dass es hat Leerzeichen am Ende des Befehls sein - das ist das Zeichen sein, werden wir eingeführt haben möchten. Wir können auch Einzug Linie mit einem anderen Text, zum Beispiel jede Zeile in der Datei mit 5 Unterstreicht einrücken:

:%norm 5i_

Oder etwas noch mehr Phantasie:

:%norm 2i[ ]

Weitere praktisches Beispiel kommentiert Bash / Python / etc Code mit Zeichen #:

:1,20norm i#

Zum erneuten Einzug Verwendung x statt i . Zum Beispiel aus jeder Zeile ersten 5 Zeichen zu entfernen:

:%norm 5x

Für mich ist die MacVim (Visual) Lösung war, wählen Sie mit der Maus und drücken Sie „>“, aber nachdem ich die folgenden Zeilen setzen in „~ / .vimrc“, da ich Räume wie anstelle von Tabulatoren:

set expandtab
set tabstop=2
set shiftwidth=2

Auch ist es sinnvoll, der Lage sein, MacVim von der Kommandozeile (Terminal.app) zu nennen, so da ich die folgenden Helfer Verzeichnis haben „~ / bin“, wo ich ein Skript Ort 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 verwirrt mit "~ / .profile" einer Menge, so dass die Umgebungsvariable PATH kann sehr lang werden.

Ich finde nicht eine Methode, die ich in den Kommentaren zu verwenden, so dass ich es teilen (ich glaube, vim only):

  1. Esc Befehlsmodus
  2. eingeben
  3. Verschieben auf das erste Zeichen der letzten Zeile, die Sie ident wollen
  4. ctrl - v zu Startblock wählen
  5. Gehen Sie zum ersten Zeichen der ersten Zeile, die Sie ident wollen
  6. verschieben - i eingeben Sondereinsatz-Modus
  7. Geben Sie so viele SPasen / Tabs wie Sie einrücken müssen (2 zum Beispiel
  8. drücken Sie Esc und Leerzeichen in allen Zeilen angezeigt

Dies ist nützlich, wenn Sie wollen sie nicht ident / Tab Einstellungen in vimrc ändern oder zu erinnern, es zu ändern, während der Bearbeitung.

Um Unindent ich das gleiche mit ctrl -. v Blockauswahl Räume wählen und löschen Sie es mit d

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

Ich selbst hatte viel zu kämpfen, dies zu wissen, seine seine sehr einfache

bearbeiten Sie Ihre .vimrc Datei unter Home-Verzeichnis fügen Sie diese Zeile

set cindent

in Sie Datei, wo Sie richtig einrücken möchten

in Normal / Befehlsmodus Typ

10==   (this will indent 10 lines from the current cursor location )
gg=G   (complete file will be properly indented)

5== werden 5 Zeilen von der aktuellen Cursorposition einrücken. so können Sie eine beliebige Anzahl vor == eingeben, wird es Anzahl der Zeilen einrücken. Dies ist im Befehlsmodus.

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

:help left

In ex mode können Sie :left oder :le verwenden Linien einen bestimmten Betrag auszurichten. Insbesondere :left wird links align Linien im [Bereich]. Er legt den Einzug in den Zeilen [indent] (default 0).

:%le3 oder :%le 3 oder :%left3 oder :%left 3 wird die gesamte Datei durch Klotzen mit drei Räumen auszurichten.

:5,7 le 3 Zeilen 5 bis 7 ausrichtet, indem sie mit 3 Plätzen Polsterung.

:le ohne Wert oder :le 0 wird mit einer Polsterung von 0 linksbündig ausrichten.

Das funktioniert in vim und gvim.

:line_num_start,line_num_end>

z.

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

Erhöhen Sie das '>' Symbol für mehr Tabs

z.

14,21>>> for 3 tabs

Python Mit viel, finde ich mich Blöcke häufig benötigen, um zu verschieben, um mehr als ein Gedankenstrich. Sie können dies tun, indem Sie eine der Blockauswahlmethoden verwenden, und dann geben Sie einfach die Anzahl der Einzüge Sie wollen direkt vor dem > springen

Eg. V5j3> werden 5 Zeilen 3 mal Einzug - die 12 Räume, wenn Sie 4 Leerzeichen verwenden, um Einzüge

Um jede Zeile in einem Dateityp einrücken, esc dann G = gg

Wie in vi markierten Code einrücken sofort durch eine Anzahl der Räume:

Option 1: einrücken eines Codeblock in vi zu drei Räumen mit Visual Block-Modus:

  1. Wählen Sie den Code-Block Sie einrücken möchten. Tun Sie dies mit Strg + V im normalen Modus und Pfeilmarkierung nach unten Text auszuwählen. Während es ausgewählt ist, geben Sie : einen Befehl an den Block von ausgewähltem Text zu geben.

  2. Im Folgenden wird in der Befehlszeile angezeigt: :'<,'>

  3. Zur Einstellung Spiegelstrich 3 Räume, Typ le 3 und drücken Sie die Eingabetaste. Dies ist, was erscheint: :'<,'>le 3

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

Option 2: einrücken eines Codeblock in vi zu drei Räumen mit Visual Line-Modus:

  1. Öffnen Sie die Datei in VI.
  2. Setzen Sie den Cursor über einen bestimmten Code
  3. Seien Sie im normalen Modus drücken Sie die Tasten:

    Vjjjj:le 3
    

    Interpretation von dem, was Sie getan haben:

    V bedeutet starten Text auswählen.

    jjjj Pfeile nach unten 4 Zeilen, Hervorhebung 4 Zeilen.

    : sagt vi Sie eine Anweisung für den markierten Text eingeben.

    le 3 bedeutet indent markierten Text 3 Zeilen.

    Der ausgewählte Code wird sofort erhöht oder verringert zu drei Räumen Vertiefung.

Option 3: Verwenden von Visual Block-Modus und Sondereinsatz-Modus Einzug zu erhöhen:

  1. Öffnen Sie die Datei in VI.
  2. Setzen Sie den Cursor über einen bestimmten Code
  3. Seien Sie im normalen Modus drücken Sie die Tasten:

    Strg + V

    jjjj
    

    (drücken Sie die Leertaste 5-mal)

    Esc Shift + i

    All markierte Text wird weitere 5 Leerzeichen eingerückt.

Um alle Datei Einzug von 4:

esc 4G=G

Ich benutze Block-Modus visuelle Auswahl:

  • Gehen Sie zur Vorderseite des Blocks (oben oder unten) zu bewegen.
  • Drücken Sie Strg-V in visuellen Block-Modus.
  • Navigieren eine Spalte vor den Zeilen zu wählen.
  • Drücken Sie I (Shift i) Insert-Modus aufzurufen.
  • einige Räume ein.
  • Drücken Sie ESC. Alle Linien werden sich verschieben.

Dies ist kein uni-tasker. Es funktioniert:

  • In der Mitte der Linien.
  • auf allen Linien eine beliebige Zeichenfolge einzufügen.
  • Um eine Spalte zu ändern (Verwendung c statt I).
  • Yank, löschen, ersetzen, etc ...
  • Für Codeblock {}: = + %

  • Für ausgewählte Zeile. Umschalttaste + v wählen Sie mit nach oben / Pfeil nach unten-Taste und drücken Sie =

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

Hinweis: 'gg' bedeutet, gehen 1 Zeile, '=' ist der Einzug Befehl ein, und 'G' bewegt den Cursor an das Ende der Datei

.

Es sei | stellt die Position des Cursors in Vim. Wenn der Text eingerückt werden soll, in einem Codeblock eingeschlossen wie:

int main() {
line1
line2|
line3
}

Sie können >i{ tun, was bedeutet, " indent (>) innen (i) Block ({) " und bekommen:

int main() {
    line1
    line2|
    line3
}

Nehmen wir nun an die Linien zusammenhängende, aber außerhalb eines Blocks, wie:

do
line2|
line3
line4
done

Um indent Zeilen 2 bis 4 können Sie visuell wählen Sie die Linien und Typ >. Oder noch schneller können Sie tun >2j zu bekommen:

do
    line2|
    line3
    line4
done

Beachten Sie, dass >Nj bedeutet Einzug von aktueller Zeile Linien unten an N. Wenn die Anzahl der Linien eingekerbt zu groß ist, kann es einige Sekunden, bis der Benutzer nehmen den richtigen Wert von N zu zählen. Um wertvolle Sekunden zu sparen, können Sie die Option relative Zahl aktivieren mit set relativenumber (verfügbar seit Vim Version 7.3).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top