Digamos que eu tenho um código como este ( |
representa a posição do cursor ):
func1(x|, func2(), y);
Eu gostaria de obter:
func1(x|);
Existe uma maneira de excluir o código da posição do cursor para a posição anterior à extremidade direita do bloco interno atual ?
Eu sei que posso seguir em frente, dt).
mas me pergunto se existe uma maneira de misturá-lo com o que di)
faz.
cursor-movement
cursor-motions
Mateusz Piotrowski
fonte
fonte
C);
neste caso em particular.%
movimento pode fazer o que você está procurando (ied%
).Respostas:
eu usaria
o que significa excluir (
d
) para o próximo ')' (])
) sem correspondência.Veja
:help ])
.fonte
Os movimentos vão apenas em uma direção, enquanto os objetos de texto vão apenas em duas direções.
Isso significa que você não pode ter metade de um objeto de texto, a menos que crie um operador personalizado com pendência de movimento que use esse objeto de texto sob o capô ou imite seu comportamento.
No seu exemplo, o texto abordado
i)
é bastante fácil de visualizar:mas como você diria ao Vim para operar do cursor até o final desse texto? Seria necessário criar operadores personalizados como
obi)
eoei)
(exemplos semi-aleatórios).fonte
ib
,imb
para a direita eiMb
para a esquerda, e assim por diante (automaticamente).Para este caso específico, eu
dfy
Para o caso geral:
dT(
excluir do cursor até o início do blocovib
selecione o restante do bloco internop
substitua o bloco interno pelo que você acabou de excluirVocê pode transformá-lo em um mapeamento.
fonte
As outras respostas existentes dependem da definição do vim e da detecção de um bloco. Minha estratégia para esse tipo de exclusão é usar o
c
comando combinado com of
movimento e o caractere real para parar. Na verdade, isso excluirá o caractere de parada, mas como também foi a última tecla pressionada, repeti-lo duas vezes tem custo quase zero, e isso será inserido novamente, poisc
muda para o modo de inserção.Para explicar com exemplos, por
o comando
c2f))
daráque pode parecer menos elegante do que algumas das outras respostas, no entanto, observe que essa estratégia é universal e não depende de nenhuma definição de bloco.
Por exemplo, com
o comando
cf>>
daráOu ao editar arquivos csv como
o comando
cf,,
daráFreqüentemente eu uso isso para excluir o restante de uma string, de
para
com
cf\\
ou de
para
com
cf""
.Isso altera a posição atual para um local ligeiramente diferente do solicitado e também muda para o modo de inserção. Mas eu queria compartilhar minha solução para excluir o resto de qualquer coisa.
fonte
cf
solução é que eu tenho que especificar o caractere onde quero parar de excluir. As perguntas perguntam o que fazer se você não puder simplesmente fazer,cf)
porque existe outro)
antes do que)
você realmente deseja alcançar (por exemplo, quando você deseja mudarfunc(x|, g(x, x), x, x, g(x, x))
parafunc(x)
). Basicamente, eu queria saber se posso evitar pressionar.
depoiscf)
.t
vez def
excluir até, mas não incluindo, o caractere fornecido. Portanto, no seu primeiro exemplo (func1(x|, func2(), y);
), você pode simplesmente usard2t)
. Como o @MateuszPiotrowski menciona, porém, não é uma solução geral e exige que você saiba para qual caractere deseja excluir. Como você geralmente sabe qual personagem termina o bloco em que está em um determinado idioma, isso não é tão ruim.O plugin vim-ninja-feet pode ser o que você está procurando. Pelo que entendi, ele cria
d[
ed]
entra em "excluir do cursor para o início / fim do objeto de texto", portantod]i)
deve ser "excluir até o final dos parênteses".fonte