Em vez de usar o comando e
motion, você pode pesquisar o final de uma string com =
caracteres:
/=\+/e
(Se você preferir escapar do literal =
em vez do meta +
, então você pode usar /\v\=+/e
.)
Considere as seguintes linhas de exemplo:
$some ==thing();
$some == thing();
$some ==$thing;
$some == $thing;
Estou escrevendo uma macro para melhorar essas linhas. Com o cursor no espaço após $some
, gostaria de adicionar um espaço após o último sinal = se já não houver um espaço. O comando e
traz o cursor para o final dos caracteres =
e $
. Ou seja, para as seqüências de caracteres =
, ==
e ===
then e
traz o cursor para o último caractere =
. No entanto, para as strings =$thing
, ==$thing
e ===$thing
, em seguida, e
traz o cursor para o caractere $
. Portanto, não posso confiar em i
ou a
para inserir corretamente um espaço após os caracteres =
.
Como posso mover o cursor para o último caractere =
relevante de forma confiável? Observe que pode haver outros caracteres =
mais tarde na linha.
O comportamento que você está descrevendo é que ambos =
e $
não estão configurados como caracteres de palavra-chave , portanto, o movimento e
se move sobre as instâncias de ambos. Para obter o efeito desejado, altere a definição da palavra-chave (temporariamente?) Por
:setlocal iskeyword+=$
Note que eu prefiro resolver isso não com movimentos explícitos e uma macro, mas sim com um comando :substitute
, pois você pode expressar melhor os locais das modificações desejadas com expressões regulares.