Como é que um obter vim para substituir um personagem dentro da seleção visual única e não em outro lugar na linha? Exemplo:
- Linha:
int arr[] = { 00 01 02 03 04 05 05 /* ... lots more like this*/};
- Seleção visual:
{ 00 01 02 03 04 05 05 /*... lots more like this*/}
- Comando:
:'<,'>s/\ /\,0x/g
- Esperado:
int arr[] = {0x00,0x01,0x02,0x03 /* and so on*/};
Depois de executar essas ações, no entanto, o resultado real é:
int,0xarr[],0x=,0x{0x00,0x01,0x02,0x03 /* and so on*/};
Existe uma maneira de modificar o comando acima para produzir o resultado esperado? Não define '<
e '>
define o intervalo no qual os comandos de pesquisa (e substituição) funcionam?
substitute
visual-mode
Bhargav Bhat
fonte
fonte
:substitute
operadores operam linha por linha, o que explica o que você está vendo no seu exemplo.Respostas:
%V
corresponde dentro da área visual. Veja:help %V
.fonte
Há
\%V
para isso, veja:h %V
:Para substituir
foo
porbar
na seleção única, use:Nesse caso em particular:
fonte
Se você deseja substituir dentro de um bloco visual , pode usar o
vis.vim
plugin .http://vim.wikia.com/wiki/Applying_substitutes_to_a_visual_block
Para instalar:
Faça o download do arquivo vis.vba.gz em http://www.drchip.org/astronaut/vim/index.html#VIS
Uma vez instalado:
Quando você digita
:B
, você verá issoTudo bem, é apenas o vim dizendo que o comando será aplicado ao bloco visual atualmente selecionado.
Melhor ainda, você pode executar qualquer comando Ex no bloco visual, não apenas substituições. Por exemplo
:B !sort
.fonte