Come sostituire solo all'interno della selezione visiva?


27

Come si arriva vim per sostituire un carattere all'interno della selezione visiva unica e non altrove sulla linea? Esempio:

  • Linea: int arr[] = { 00 01 02 03 04 05 05 /* ... lots more like this*/};
  • Selezione visiva: { 00 01 02 03 04 05 05 /*... lots more like this*/}
  • Comando: :'<,'>s/\ /\,0x/g
  • Previsto: int arr[] = {0x00,0x01,0x02,0x03 /* and so on*/};

Dopo aver eseguito queste azioni, tuttavia, il risultato effettivo è:

int,0xarr[],0x=,0x{0x00,0x01,0x02,0x03 /* and so on*/};

C'è un modo per modificare il comando sopra per produrre il risultato previsto? Non '<e '>definire l'intervallo in cui la ricerca (e sostituire) i comandi di lavoro?


2
Non conosco la risposta, ma so che gli :substituteoperatori, riga per riga, spiegano ciò che vedi nel tuo esempio.
Karl Yngve Lervåg,

Risposte:


32
:'<,'>s/\%V\ /\,0x/g

%Vpartite all'interno dell'area visiva. Vedere :help %V.


1
Va detto che questa soluzione verifica solo che l' inizio della partita è all'interno della selezione visiva .
Christian Brabandt,

7

C'è \%Vper quello, vedi :h %V:

\% V

Corrispondenza all'interno dell'area visiva. Quando la modalità Visual è già stata arrestata, corrispondere all'area che gv selezionerebbe nuovamente. Questa è una corrispondenza / larghezza zero. Per assicurarsi che l'intero modello sia all'interno dell'area visiva, inserirlo all'inizio e alla fine del modello , ad esempio:> /\%Vfoo.*bar\%V

Per sostituire fooda barsolo all'interno della selezione, l'uso:

:'<,'>s/\%Vfoo\%V/bar/
:'<,'>s/\%Vfoo\%V/bar/g
:'<,'>s/\%Vfoo\%V/bar/cg

In questo caso particolare:

:'<,'>s/\%V\ \%V/\,0x/g

4

Se si desidera sostituire all'interno di un blocco visivo , è possibile utilizzare il vis.vimplug-in .

http://vim.wikia.com/wiki/Applying_substitutes_to_a_visual_block

Installare:

Scarica vis.vba.gz da http://www.drchip.org/astronaut/vim/index.html#VIS

# Open vis.vba.gz in Vim 7.1 or later.
vim vis.vba.gz

# Source the open file.
:so %

# Quit Vim
:q

Una volta installato:

ctrl-v to enter visual-block mode
Move to select the block you want
:B s/pattern/newtext/

Quando digiti :B, vedrai questo

:'<,'>B 

Va bene, è solo Vim a dire che il comando si applicherà al blocco visivo attualmente selezionato.

Ancora meglio, puoi eseguire qualsiasi comando Ex sul blocco visivo, non solo sostituzioni. Per esempio :B !sort.

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.