Vim substituir em um modo visual

0

Em um bloco de teste assim

cron.allow
cron.deny

Eu quero substituir cron com at, apenas no intervalo selecionado pelo modo visual (ctrl + v) Então eu pressiono ctrl + v: e aparece o! pronto Está bem Eu faço

sed s:cron:at:gc

mas eu só vejo esse erro

:'<,'>! sed s:cron:at:gc
shell end return code 1
7 lines filteerd

e isso depois do retorno

sed: expression -e #1, caracther 12: option 's' unknown

Por quê?

    
por elbarna 07.05.2015 / 01:06

3 respostas

3

Uma vez no modo visual block com suas linhas selecionadas, tente isto:

:'<,'>s/cron/at/g

O Vim tem capacidade de pesquisa e substituição sem a necessidade de chamar um comando externo.

    
por 07.05.2015 / 02:07
2

Na linha de comando, observe que isso é bem-sucedido:

$ echo cron | sed s:cron:at:
at

Mas isso não acontece:

$ echo cron | sed s:cron:at:c
sed: -e expression #1, char 11: unknown option to 's'

c não é uma opção sed . O seguinte, no entanto, funcionará:

:'<,'>! sed s:cron:at:g

Mas, é claro, não há necessidade de usar sed para fazer substituições tão simples no vim. Além disso, se você quiser c (confirm), use o comando de substituição interno do vim:

:'<,'>s/cron/at/gc
    
por 07.05.2015 / 01:58
1

Parece que você não precisa usar sed ou substituir nada. Apenas use o comando change ( c ). Da documentação:

Visual-block change                       *v_b_c*
All selected text in the block will be replaced by the same text string.  When
using "c" the selected text is deleted and Insert mode started.  You can then
enter text (without a line break).  When you hit <Esc>, the same string is
inserted in all previously selected lines.

A chave aqui é, "Quando você atinge <Esc> , a mesma string é inserida em todas as linhas selecionadas anteriormente." Então, tudo o que você precisa fazer é bloquear o texto cron , pressione c , digite at , saia do modo de inserção e você obterá o resultado desejado de substituir cada cron no bloco por at .

Se você realmente quiser executar um comando de substituição em um bloco, eu cortaria e colaria o bloco em algumas linhas em branco, executaria sua substituição nessas linhas e depois recortaria e colaria o bloco resultante em seu local original. / p>

O problema com o comando que você tem em sua pergunta é que você está tentando usar o sed externo e o comando s em sed não aceita um sinalizador c .

    
por 07.05.2015 / 02:15

Tags