Gibt es eine Möglichkeit, ' ' in dieselbe Spalte einzufügen , da nicht alle Zeilen dieselbe Länge haben, sodass Zeile 1 möglicherweise ' ' in der 15. Spalte hat, Zeile 2 jedoch '*' in der 25. Spalte.
Aman Jain
11
Es gibt nur 1 EOL pro Zeile, daher ist das gFlag nicht erforderlich.
DoubleDown
Ich wollte / zum Anfang jeder Zeile hinzufügen: 1, $ s / ^ / \ / g hat für mich funktioniert.
Farooqsadiq
@dirkgently Wie kann ich eine String-Variable als Argument an diesen Befehl übergeben (Sie wissen, anstelle des *)?
Matheus Rotta
353
Noch kürzer als der Befehl: search:
:%norm A*
Das bedeutet es:
%=for every line
norm = type the following commands
A*= append '*' to the endof current line
Mann, es gibt keinen vi oder vim Thread, von dem ich nichts lerne. Heute lerne ich etwas über Norm. Und wie sie bei Cheers sagen: "Norm!"
Smcameron
4
Zum Voranstellen verwenden Sie einfach 0i *, 0 bringt Sie zum Zeilenanfang, i zum Einfügen und * zum *. D:
Rob
7
Als VimGolfer kann ich nicht anders, als das hinzuzufügen, I*anstatt 0i*Ihnen einen Tastendruck zu ersparen.
Jedidiah verletzt
24
Ein weiterer Tipp: Dies funktioniert auch für Bereiche. Markieren Sie einfach die Linien im visuellen Modus und drücken Sie :, dies wird den Befehl vorab ausfüllen, mit :'<,'>dem Sie dann:'<,'>norm A*
Ahhh ... Die zweite kann auch mit einer Auswahl von Zeilen verwendet werden. Nett!
Tim Fletcher
Könnten Sie bitte das erste Beispiel erklären?
Cody Poll
@CodyPoll gist ein globalBefehl, der mit jeder übereinstimmenden Zeile etwas macht. $passt zu jeder Zeile. Es könnte auch ^oder sein .*. norm führt Befehle aus, die Sie normalerweise im Befehlsmodus verwenden. So A*Mittel anhängen *an das Ende der Zeile.
Defhlt
41
Ich denke, die Verwendung des visuellen Blockmodus ist eine bessere und vielseitigere Methode, um mit solchen Dingen umzugehen. Hier ist ein Beispiel:
Thisis the First line.Thisis the second.The third.
So fügen Sie "Hallo Welt" ein. (Leerzeichen + Zwischenablage) am Ende jeder dieser Zeilen:
Drücken Sie für ein Zeichen in der ersten Zeile Strg-V (oder Strg-Q, wenn Strg-V Einfügen ist).
Drücken Sie jj, um den visuellen Block über drei Zeilen zu erweitern.
Drücken Sie $, um den visuellen Block bis zum Ende jeder Zeile zu verlängern. Drücken Sie A, dann Leerzeichen und geben Sie Hello world ein. + dann Esc.
Das Ergebnis ist:
Thisis the First line.Hello world.Thisis the second.Hello world.The third.Hello world.
Anstatt zu drücken jj, kann man drücken G, um zur letzten Zeile zu gelangen. Dies ist nützlich in großen Dateien, in denen das Drücken jbis zum Erreichen der letzten Zeile nicht praktikabel ist.
Nash
Stimmen Sie zu, dass der visuelle Block hier am saubersten und auch erweiterbarer ist
Peter Dolan
Beachten Sie, dass dies zunächst nicht in allen Zeilen funktioniert, aber nachdem Sie die Esc-Taste gedrückt haben, wird es durchlaufen und allen hinzugefügt.
Noumenon
Visual Block verursacht Probleme und Fehler, wenn vim als Erweiterung für andere Dinge wie VS Code verwendet wird. In diesen Fällen ist das Suchen und Ersetzen, nach dem der ursprüngliche Benutzer fragt, die zuverlässige Option.
Brettins
Stellen Sie sicher, dass Sie Großbuchstaben A verwenden. Kleinbuchstaben "a" funktionieren nicht.
Jeff Hoye
14
Wenn Sie Hello world am Ende jeder Zeile hinzufügen möchten:
:%s/$/HelloWorld/
Wenn Sie dies für eine bestimmte Anzahl von Zeilen tun möchten, verwenden Sie beispielsweise 20 bis 30:
:20,30s/$/HelloWorld/
Wenn Sie dies am Anfang jeder Zeile tun möchten, verwenden Sie:
Dadurch wird jeder Linienendanker gefunden und durch ersetzt *. Ich sage "Ersatz", aber in Wirklichkeit ist es eher ein Anhang, da der Anker eher eine besondere Sache als ein normaler Charakter ist. Weitere Informationen finden Sie unter Potenz von g - Beispiele .
Was bedeutet s // im regulären Ausdruck? Ich kenne einen ähnlichen Befehl: g / / / p, (grep). Ich bin mir ziemlich sicher, dass Ihr Befehl zumindest in der Struktur meinem nahe kommt.
Léo Léopold Hertz 28
1
Das s ist ein Ersatz - es ersetzt den Anker am Ende der Linie durch das Sternchen (nun, ersetzt es nicht wirklich, da es ein Ankerpunkt ist).
Paxdiablo
3
:% s / \ n / * \ r / g
Ihre erste ist irgendwo anders richtig, aber Vim muss aus irgendeinem Grund eine andere Newline-Behandlung haben.
:s///
,\n
einem Nullzeichen entspricht. Der Abschnitt:help sub-replace-special
ist relevant.Antworten:
:%s/$/\*/g
sollte arbeiten. So sollte es auch sein,
:%s/$/*/g
wie MrWiggles richtig hervorhebt .quelle
g
Flag nicht erforderlich.Noch kürzer als der Befehl: search:
Das bedeutet es:
quelle
I*
anstatt0i*
Ihnen einen Tastendruck zu ersparen.:
, dies wird den Befehl vorab ausfüllen, mit:'<,'>
dem Sie dann:'<,'>norm A*
I
stattdessen -:%norm I*
Ebenfalls:
Ebenfalls:
quelle
g
ist einglobal
Befehl, der mit jeder übereinstimmenden Zeile etwas macht.$
passt zu jeder Zeile. Es könnte auch^
oder sein.*
. norm führt Befehle aus, die Sie normalerweise im Befehlsmodus verwenden. SoA*
Mittel anhängen*
an das Ende der Zeile.Ich denke, die Verwendung des visuellen Blockmodus ist eine bessere und vielseitigere Methode, um mit solchen Dingen umzugehen. Hier ist ein Beispiel:
So fügen Sie "Hallo Welt" ein. (Leerzeichen + Zwischenablage) am Ende jeder dieser Zeilen:
Das Ergebnis ist:
(Beispiel von Vim.Wikia.com )
quelle
jj
, kann man drückenG
, um zur letzten Zeile zu gelangen. Dies ist nützlich in großen Dateien, in denen das Drückenj
bis zum Erreichen der letzten Zeile nicht praktikabel ist.Wenn Sie Hello world am Ende jeder Zeile hinzufügen möchten:
Wenn Sie dies für eine bestimmte Anzahl von Zeilen tun möchten, verwenden Sie beispielsweise 20 bis 30:
Wenn Sie dies am Anfang jeder Zeile tun möchten, verwenden Sie:
quelle
Das brauchst du
g
am Ende nicht wirklich . So wird es:Oder wenn Sie nur das
*
am Ende von möchten , sagen Sie die Zeilen 14-18:oder
quelle
... und jede Zeile mit * voranstellen (den Anfang hinzufügen),
quelle
Eine Option ist:
Dadurch wird jeder Linienendanker gefunden und durch ersetzt
*
. Ich sage "Ersatz", aber in Wirklichkeit ist es eher ein Anhang, da der Anker eher eine besondere Sache als ein normaler Charakter ist. Weitere Informationen finden Sie unter Potenz von g - Beispiele .quelle
Ihre erste ist irgendwo anders richtig, aber Vim muss aus irgendeinem Grund eine andere Newline-Behandlung haben.
quelle
Dies reicht aus und stellt sicher, dass führende Leerzeichen ignoriert werden.
quelle