Ir para o final de '===', mas não incluir '$'

0

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.

    
por dotancohen 18.02.2014 / 12:37

2 respostas

2

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 .)

    
por 18.02.2014 / 23:12
2

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.

    
por 18.02.2014 / 12:51

Tags