Supondo que eu tenha uma linha em um arquivo XXXX
sendo um espaço reservado que eu selecionei da v
seguinte maneira:
XXXX Some other text
Como posso alterar apenas a XXXX
saída de um comando externo, como date +%Y%m%d
?
Cheguei até
:'<,'>!date +\%Y\%m\%d
mas isso substituiu toda a linha.
external-command
replace
muk.li
fonte
fonte
Respostas:
Você pode excluir o texto e inserir a saída de um comando usando CtrlR- =:
Para a expressão, você pode usar a
system()
função para executar comandos externos.Depois de selecionar o texto, pressione e
c
, em seguida,<c-r>=
usesystem('date +%Y%m%d')
como expressão.fonte
date
. Se você tentar algo comosystem('printf %s foo')
, que não gera uma nova linha à direita, verá que há uma diferença.strftime
função que você pode usar em vez desystem('date …')
. A cadeia de formato é a mesma."=system('date +%Y%m%d')p
na seleção visual.Se você colocar o cursor nessa linha, poderá:
0
para colocar o cursor na primeira coluna.f
Space para colocar o cursor no primeiro espaço em branco.i
Enter Esc para dividir a linha.l
para mover o cursor uma linha para cima.:.!date +\%Y\%m\%d
para executar o comandoJ
para juntar as linhas novamente.De
:h :visual_example
:Veja também
:h visual-operators
para detalhes.A partir deste comentário: Você também pode tentar o plugin vis ou NrrwRgn . Ambos devem lidar com isso muito bem. (Obrigado @ christian-brabandt pela dica).
fonte
Crie um mapeamento temporário para essas substituições. Por exemplo:
Então, no modo visual, você pode selecionar o texto, digitar
qq
e ele será substituído pela saída do comando. Neste exemplowc -c
processará sua seleção, que é o@"
parâmetroperl -pe chomp
é necessário para remover uma nova linha à direita da saída.fonte
Tente o seguinte:
date
comando no registro a, com a nova linha final removida.XXXX
(g/XXXX/
) eXXXX
com o conteúdo do registro a (s/XXXX/\=@a/g
)Veja
:h let-@
e:h :global
também a seção "Sublist" em:h list-index
fonte
Plugin: Comandos do bloco visual (vis) por DrChip
Instalação
vis.vba.gz
e dependênciacecutil.vba.gz
no packpath do vim8O exemplo de OP se torna
fonte