2010-07-16 10 views
29

Ich weiß, dass die Substitution Befehl mit Vims können Sie bestimmen eine Reihe von Linien:VIM: Suche nur zwischen bestimmten Zeilennummern?

:12,24s/search/replace 

Ich möchten auch einen Bereich mit normaler Suche angeben können. So etwas wie

:12,24/search 

Da das scheint nicht (zumindest auf meiner Vim-Konfiguration) zu arbeiten, weiß jemand, wie dies zu erreichen?

Vielen Dank.

Antwort

24
:help search-range 

und dann

:help /\%>l 

so im Wesentlichen:

/\%>12l\%<24lsearch 
+0

Ich sehe nicht schreiben, was dies fügt den Start, Stop/Muster/s/TGT/Replik/Muster angeboten von Carl. – chernevik

+7

@chernevik: Überprüfen Sie den Zeitstempel der Antworten. – akira

+0

^Für den 'richtigen Weg'. Vim kann viele Wege zur Erfüllung einer Aufgabe geben. – 0xc0de

32

Große Antwort von Akira. Aber nach einigem Graben habe ich eine Alternative gefunden. Es ist nicht so elegant, aber einfacher zu geben:

:12,24g/search/ 

Dies wird Ihnen eine lästige Aufforderung geben, aber es wird in der ersten Zeile im Bereich der gesuchten Zeichenfolge, die am Ende.

+0

Das funktionierte für mich ohne jede sofortige Belästigung. Also der Befehl "195208g/print/s/$/# debug/>> angehängt" # debug 'an die Zeilen mit' print 'von 195 bis 208, und nur diese Zeilen. Vielleicht ein Versions-Problem? Ich benutze VIM 7.2.330. – chernevik

+0

7.3 hier, und es sagt 'Drücken Sie die EINGABETASTE oder geben Sie Befehl ein, um fortzufahren. 'Ich bin nicht gut genug versiert in vim zu sagen, wo die Unterschiede herkommen könnten. –

16

Benötigen Sie wirklich Zeilennummern? Ein anderer Weg könnte darin bestehen, den Bereich visuell auszuwählen.

  1. wählen Sie den Bereich mit v, V oder was auch immer
  2. Taste ESC in dem Bereich
  3. Suche abzuwählen /\%Vwhat_to_search für ‚what_to_search‘ in dem zuvor ausgewählten Bereich zu suchen, verwenden.

Dies ist weniger zu geben, aber nicht direkt, was Sie für ;-)

See gefragt haben: Hilfe% V

[EDIT] Große, habe ich gerade gelernt, dass der Bereich zu suchen kann nach der Suche geändert werden, indem ein anderer Bereich ausgewählt wird. Durch erneutes Drücken der ESC-Taste wird dieser Bereich wieder deaktiviert und durch Drücken von n wird die Suche wiederholt. Vim ist wirklich immer gut für angenehme Überraschungen.

15

Verwenden Sie weiterhin den Ersetzungsbefehl, aber fügen Sie die gc Flags zu Ihrem ursprünglichen Beispiel hinzu.

:12,24s/search//gc

Von :help search-range

[in einem Bereich suchen] verwenden, um den ": Ersatz" Befehl mit dem 'c' Flagge.

Beispiel: :.,300s/Pattern//gc

Dieser Befehl von der Cursorposition bis Zeile 300 für "Pattern" sucht.Beim Spiel können Sie 'q' eingeben, um zu stoppen, oder 'n', um die nächste Übereinstimmung zu finden.

3

Wenn Marken a und b sagen, dann kann die Suche zwischen einem auf die Region beschränkt werden und b mit

/\%>'a\%<'bSearchText 

Dies kann

cmap vmsab /\%>'a\%<'b 
cmap vmscd /\%>'c\%<'d 
0

mit einem cmap vereinfacht werden Verwenden Narrow Region plugin können wir einen temporären Puffer mit dem Bereich öffnen, den wir suchen oder ändern müssen

:900,1000NarrowRegion 

Dann können wir eine Suche

/thing 

oder eine Änderung meke und die Puffer zurück

:%s/this/that/g 
:wq