2010-07-16 27 views
29

So che con la sostituzione di comando di Vim è possibile specifica una serie di linee:VIM: cerca solo tra numeri di linea specifici?

:12,24s/search/replace 

voglio essere in grado di specificare un intervallo con le ricerche normali pure. Qualcosa di simile

:12,24/search 

Dal momento che non sembra funzionare (almeno sulla mia configurazione Vim), qualcuno sa come raggiungere questo obiettivo?

Grazie.

risposta

24
:help search-range 

e poi

:help /\%>l 

così essenzialmente:

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

non vedo cosa questo aggiunge al: start, stop/modello/s/TGT/repl/pattern offerto da Carl. – chernevik

+7

@chernevik: controlla il timestamp delle risposte. – akira

+0

^Per il "modo corretto". Vim può dare molti modi per portare a termine un compito. – 0xc0de

32

Grande risposta da Akira. Ma dopo aver scavato, ho trovato un'alternativa. Non è così elegante, ma più facile da digitare:

:12,24g/search/ 

Questo vi darà un prompt di fastidioso, ma finirà in prima linea all'interno della gamma che contiene la stringa cercata.

+0

Questo ha funzionato per me senza alcun fastidio immediato. Quindi il comando << 195,208g/print/s/$/# debug/>> ha aggiunto "# debug" alle righe contenenti "print" da 195 a 208 e solo quelle righe. Forse un problema di versione? Sto usando VIM 7.2.330. – chernevik

+0

7.3 qui, e dice 'Premere INVIO o digitare comando per continuare. Io non sono abbastanza esperto di Vim per dire da dove potrebbero venire le differenze. –

16

Hai davvero bisogno di numeri di linea? Un altro modo potrebbe essere quello di selezionare visivamente l'intervallo.

  1. selezionare l'intervallo utilizzando v, V o qualsiasi altra cosa
  2. premere ESC per deselezionare la gamma
  3. ricerca utilizzando /\%Vwhat_to_search per cercare 'what_to_search' nel range selezionato in precedenza.

Questo è minore di digitare, ma non direttamente quello che avete chiesto ;-)

See: aiuto% V

[EDIT] Grande, ho appena appreso che la gamma per la ricerca in può essere cambiato dopo aver effettuato la ricerca selezionando un altro intervallo, deselezionando nuovamente questo intervallo premendo ESC e premendo n per ripetere la ricerca. Vim è davvero sempre buono per piacevoli sorprese.

15

Continuare a utilizzare il comando di sostituzione, ma aggiungere i flag gc all'esempio originale.

:12,24s/search//gc

Da :help search-range

[Per cercare all'interno di un intervallo] utilizzare il : comando con la 'c' flag "sostituto".

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

Questo comando ricercare posizione cursore fino linea 300 per "Pattern".Alla partita, puoi digitare 'q' per interrompere, o 'n' per trovare la prossima partita .

3

se c'è segni dicono A e B, allora la ricerca può essere limitata alla regione tra A e B utilizzando

/\%>'a\%<'bSearchText 

Questo può essere semplificata con un CMAP

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

Utilizzando Narrow Region plugin possiamo aprire un buffer temporaneo con l'intervallo che dobbiamo cercare o modificare

:900,1000NarrowRegion 

Poi possiamo meke una ricerca

/thing 

o di un cambiamento e scrivere il back buffer

:%s/this/that/g 
:wq 
Problemi correlati