2012-05-06 22 views
20

In Vim bewegen, wenn ich das tue:Vim ersetzen alle ohne Cursor

:%s/foo/bar/g 

Es werden alle Vorkommen von 'foo' mit 'bar' im gesamten Dokument ersetzen. Wenn der Vorgang abgeschlossen ist, wurde der Cursor an die letzte Position verschoben, an der "foo" durch "bar" ersetzt wurde.

Wie starten Sie :%s/foo/bar/g, ohne dass der Cursor die ursprüngliche Position verlässt, bevor dieser Befehl ausgegeben wird?

Gibt es eine Option, die ich in .vimrc Datei einstellen kann?

+6

Ich bin mir nicht sicher, ob ich das tun soll, ohne den Cursor zu bewegen, aber Sie können es zurückschieben, indem Sie zweimal in den Anführungsstrich drücken. –

Antwort

23

Ich tippe einfach Ctrl +O nach ersetzen die bisherigen Standort zu kommen.

+0

@lucapette Danke für die Formatierung. –

+0

@ib. nie müde, Antworten perfekter zu machen :) – sehe

+1

Gibt es einen ":" Befehl dafür? – Bunder

25

Wenn der Befehl :substitute ausgeführt wird, bevor die tatsächlichen Ersetzungen durchgeführt werden, wird die Position des Cursors in einer Sprungliste gespeichert. Um zu der Position vor dem letzten Sprung zurückzukehren, kann man die Befehle `` oder '' Normalmodus verwenden. Während ersteres genau zur gespeicherten Position springt, verschiebt letzterer den Cursor auf das erste nicht leere Zeichen in der Zeile, in der sich die Position befindet.

Also, um schnell die Cursor wieder zurück an seinen ursprünglichen Speicherort, Typ `` nach Substitution Befehl beendet ist.

So zu kombinieren Substitution und Bewegen des Cursors in einem Befehl, Ausgabe

:%s/pat/str/g|norm!`` 

oder, wenn es genug ist, nicht auf die genaue Position zu springen, sondern nur an seiner Linie,

:%s/pat/str/g|'' 

Wie Wie oben gezeigt, kann '' anstelle von norm!'' im zweiten Befehl wegen der Bereichssyntax von Ex-Befehlen verwendet werden (siehe :help :range).

+0

Netter Versuch. Aber nicht elegant. sollte "Ctrl-o" verwenden. – mattn

+0

@mattn: Nach welchem ​​Kriterium mit 'Ctrl' +' O' ist elegant, während '\' '' nicht ist? Der letztere Befehl ist nicht länger als der vorherige in Bezug auf Tastenanschläge; beide führen in diesem Fall zur selben Cursorbewegung. Warum findest du '\' \ '' (statt 'Strg' +' O') unelegant? –

+0

Es ist eine einfache Antwort. länger als c-o. Und dein Befehl update jumplist. Wenn ich deinen Weg benutze, werde ich g verwenden. :) – mattn