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.
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ê?
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
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
.