Esiste un collegamento per riutilizzare il termine di ricerca di trova e sostituisci?


8

Penso che ci sia una chiara possibilità che questa domanda sia già stata posta, ma non riesco a trovarla.

Se sto facendo qualcosa del genere :s/foo/bar/ge poi voglio richiamarlo di nuovo sulla riga successiva ma con bazinvece di bar, c'è un modo più veloce per farlo? Sento che &bazdovrebbe funzionare, ma non funziona.

Risposte:


11

Non esattamente quello che chiedi, ma puoi farlo:

:s/foo/bar/g

E poi:

:s//baz/g

Puoi usarlo perché quando usi :sil modello cercato viene salvato nel registro di ricerca. Che puoi vedere con :reg /.


Lavori in corso: puoi accelerare il flusso di lavoro con:

nnoremap && :s<UP><C-F>F/cT/

E usalo così:

:s/foo/bar/g

e poi

&&baz<CR>

decomposizione:

nnoremap &&         " define a new mapping
:s<UP>              " get the last :s command in the history
<C-F>               " use this command in the cmdline window
F/                  " go back to the last /
cT/                 " change back up to the last /

Alcune note:

  • Questo non funzionerà se non hai alcuna bandiera
  • Questo non funzionerà se non si dispone di una stringa sostitutiva
  • Si dovrebbe lavorare altrimenti

(fammi sapere se posso migliorarlo).

Qualche lettura:

  • :h cmdline-window
  • :h c_CTRL-F

2
È decisamente meglio di quello che stavo facendo prima. Prenderò che purtroppo potrebbe non esserci un modo più veloce :(.
Eli Sadoff

Non AFAIK, e sto provando a creare una mappatura che fa quello che vuoi, ma fuori dalla scatola sono abbastanza sicuro che ti limiterai a digitare di nuovo l'espressione sostitutiva
nobe4

5

Oltre alla risposta di @ nobe4, Damian Conway ha due mappature piuttosto interessanti per accelerare la ricerca e sostituire le azioni. Vengono da questo come vim intervista che vale assolutamente la pena di leggere completamente.

Per citarlo:

[...] Ho scoperto che facevo per sempre ricerche e sostituzioni globali (ad es. :%s/X/Y/g<CR>), Quindi ho eliminato la digitazione ripetitiva rubando il Scomando mai usato (da me) :

nmap  S  :%s//g<LEFT><LEFT>

Ora ho solo bisogno di digitare: SX / Y

Ma poi ho iniziato a notare quanto spesso facevo una ricerca / per qualche modello e, dopo aver esaminato le partite, ho voluto sostituirle tutte a livello globale. Anche con la mappatura S che è stata la ripetizione più fastidiosa: prima fai la ricerca: / pattern poi fai il rimpiazzo: Spattern / sostituzione Quindi ho rubato il comando M (anche mai usato da me) per quello:

nmap <expr>  M  ':%s/' . @/ . '//g<LEFT><LEFT>'

Ora è solo: fai la ricerca: / pattern quindi sostituisci tutte le partite: sostituzione


Per rispondere alla tua domanda, immagino che potresti leggermente modificare la prima mappatura per qualcosa del genere:

nmap  S  :s///g<LEFT><LEFT>

In questo modo puoi prima effettuare la tua sostituzione :s/foo/bar/g, andare alla riga successiva, premere Se otterrai: :s//|/gdov'è |il cursore, ora puoi digitare la tua nuova sottoscrizione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.