it-swarm.com.de

Wie füge ich am Anfang einer mehrzeiligen Auswahl in vi/Vim Text ein?

In Vim , wie gehe ich vor, um Zeichen am Anfang jeder Zeile einer Auswahl einzufügen?

Angenommen, ich möchte einen Codeblock auskommentieren, indem Sie // am Anfang jeder Zeile voranstellen (vorausgesetzt, das Kommentarsystem meiner Sprache erlaubt keine Blockkommentierung wie /* */). Wie würde ich das machen?

358
Jordan Parmer
  • Drücken Sie Esc 'Befehlsmodus' aufrufen
  • Benutzen Ctrl+V um in den visuellen Blockmodus zu gelangen
  • Bewegung Up/Downum die Textspalten in den Zeilen auszuwählen, die Sie kommentieren möchten.
  • Dann drück Shift+i und geben Sie den Text ein, den Sie einfügen möchten.
  • Dann drück Esc, warte 1 Sekunde und der eingefügte Text erscheint in jeder Zeile.

Weitere Informationen und Lektüre finden Sie unter dieser verwandte Artikel im Vim-Wiki .

655
pixelbeat

Dies ersetzt den Anfang von jeder Zeile durch "//":

:%s!^!//!

Dies ersetzt den Anfang von jeder ausgewählten Zeile (Auswahl im visuellen Modus) durch "//":

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

Hinweis dass gv (im normalen Modus) die letzte visuelle Auswahl wiederherstellt.

162
Tomalak

Das allgemeine Muster für Suchen und Ersetzen lautet:

:s/search/replace/

Ersetzt das erste Vorkommen von 'Suchen' durch 'Ersetzen' für die aktuelle Zeile.

:s/search/replace/g

Ersetzt alle Vorkommen von 'search' durch 'replace' für die aktuelle Zeile, 'g' steht für 'global'

Dieser Befehl ersetzt jedes Vorkommen von 'search' durch 'replace' nur für die aktuelle Zeile. Mit% wird die gesamte Datei durchsucht. Um zu bestätigen, dass jeder Ersatz interaktiv ein 'c' zur Bestätigung anfügt:

:%s/search/replace/c

Interaktiv bestätigen Sie, indem Sie 'Suchen' durch 'Ersetzen' für die gesamte Datei ersetzen.

Anstelle des% -Zeichens können Sie einen Zeilennummernbereich verwenden (beachten Sie, dass das Zeichen '^' ein spezielles Suchzeichen für den Zeilenanfang ist) :

:14,20s/^/#/

Fügt ein '#' Zeichen am Anfang der Zeilen 14-20 ein

Wenn Sie ein anderes Kommentarzeichen (wie //) verwenden möchten, ändern Sie Ihren Befehlsbegrenzer:

:14,20s!^!//!

Fügt am Anfang der Zeilen 14-20 eine '//' Zeichenfolge ein.

Oder Sie können den // Charakteren immer einfach entkommen wie:

:14,20s/^/\/\//

Fügt am Anfang der Zeilen 14-20 eine '//' Zeichenfolge ein.

Wenn Sie in Ihrem Editor keine Zeilennummern sehen, geben Sie einfach Folgendes ein

:set nu
73
cyber-monk

Ein anderer Weg, der für Neulinge einfacher sein könnte:

 some█
 code
 here

Stellen Sie den Cursor in die erste Zeile, z. durch

:1Enter

und geben Sie Folgendes ein, um in den Einfügemodus zu gelangen und Ihren Text hinzuzufügen:

I//Space

 // █some
 code
 here

Drücken Sie Esc Um zum Befehlsmodus zurückzukehren und den Digraph zu verwenden:

j.j.

 // some
 // code
 //█here

j ist ein Bewegungsbefehl, um eine Zeile nach unten zu gehen und . wiederholt den zuletzt ausgeführten Bearbeitungsbefehl.

33
ninegrid

Und noch ein anderer Weg:

  • An den Anfang einer Zeile gehen
  • aktivieren Sie den Visual Block-Modus (CTRL-v)
  • wählen Sie die gewünschten Zeilen aus (bewegen Sie sich mit nach oben/unten) j/koder zu einer Zeile springen mit [line]G)
  • drücken Sie I (das ist hauptstadt i)
  • geben Sie die Kommentarzeichen ein
  • drücken Sie ESC
23
Yewge

Dies fügt # am Anfang jeder Zeile hinzu:

:%s/^/#/

Und die Leute werden aufhören, sich über den Mangel an richtig kommentierten Skripten zu beschweren.

17
Jar-jarhead

Wenn Sie Lust haben wollen, schreiben Sie dies in Ihre .vimrc:

vmap \c :s!^!//!<CR>
vmap \u :s!^//!!<CR>

Dann können Sie im visuellen Modus \c drücken, um den Block mit c omment zu versehen, und \u, um u ncomment. Natürlich können Sie diese Tastenkombinationen auch beliebig ändern.

14
Lucas Oman

Noch ein anderer Weg: 

:'<,'>g/^/norm I//

/^/ ist nur ein Dummy-Muster für jede Zeile. Mit norm können Sie die folgenden Befehle im Normalmodus ausführen. I// gibt an, dass der Einfügemodus aktiviert werden soll, während der Cursor an den Anfang der Zeile bewegt wird. Anschließend wird der folgende Text (zwei Schrägstriche) eingefügt. 

:g ist oft praktisch, wenn Sie komplexe Zeilen in mehreren Zeilen ausführen möchten. In diesem Fall können Sie zwischen mehreren Modi wechseln, Zeilen löschen oder hinzufügen, den Cursor bewegen und eine Reihe von Makros ausführen das entspricht einem Muster.

9
Brian Carper

Zum Kommentieren von Codeblöcken mag ich das Plugin NERD Commenter .

Wählen Sie einen Text aus:

Shift-V
...select the lines of text you want to comment....

Kommentar:

,cc

Unkommentiert:

,cu

Oder schalten Sie einfach den Kommentarzustand einer Zeile oder eines Blocks um:

,c<space>
3
Kevin

Ich kann das EnhCommentify Plugin empfehlen.

z.B. stell das zu deinem vimrc:

let maplocalleader=','
vmap <silent> <LocalLeader>c <Plug>VisualTraditional
nmap <silent> <LocalLeader>c <Plug>Traditional
let g:EnhCommentifyBindInInsert = 'No'
let g:EnhCommentifyMultiPartBlocks = 'Yes'
let g:EnhCommentifyPretty = 'Yes'
let g:EnhCommentifyRespectIndent = 'Yes'
let g:EnhCommentifyUseBlockIndent = 'Yes'

sie können dann die (ausgewählten) Zeilen mit ', c' kommentieren/auskommentieren.

2

Wenn es sich bei der Mehrzeilenauswahl um einen Absatz handelt, müssen die Zeilen nicht manuell ausgewählt werden. vim kann das für dich tun:

  1. vip: Wählen Sie den gesamten Absatz aus und markieren Sie ihn
  2. shift-i: Text am Zeilenanfang einfügen
  3. escape: Einfügemodus verlassen/Normalmodus aktivieren [Zeilenanfang noch ausgewählt]
  4. escape: Auswahl der Zeilenanfänge aufheben
1
TheUnseen

Markieren Sie den zu kommentierenden Bereich als visuellen Block (<C-V)

und c#<ESC>p

  1. cgeändert zu "#"
  2. leg es zurück

Wenn Sie dies häufig tun, definieren Sie eine Abkürzung (Beispiel \q) in Ihrer .vimrc

:vmap \q c#<ESC>p
1
JJoao

So fügen Sie "ABC" am Anfang jeder Zeile ein:

1) Wechseln Sie in den Befehlsmodus

2):% Norm IN ABC

0
Mac