Como tratar condicionalmente um remapeamento de vim?

2 respostas

2

Para o remapeamento condicional, você pode usar um mapeamento de expressão ( :help map-expr ). Não sei se isso já funciona para você, mas deve começar:

:vnoremap <expr> p (getregtype() ==# 'v' && col("'>") == col('$') ? '"_dp' : '"_dP')
    
por 26.03.2013 / 08:45
1

Usar o registro de buraco negro pode ser uma solução para dois problemas: você deseja manter seus registros numerados para conter apenas texto explicitamente extraído ou você deseja poder colar o mesmo texto várias vezes.

Para o primeiro problema, usar "_d em vez de d é a ferramenta certa porque nada do que você excluir aparecerá em qualquer registro.

Para o segundo problema, combinar "_d e p ou P inevitavelmente cria problemas devido à posição do cursor e à orientação de p e P .

A resposta de Ingo parece ser um compromisso perfeito.

Mas se você não se importa com o estado de seus registradores numerados, uma alternativa é usar o "0 register que sempre contém o texto mais recente e não é afetado por c ou d ?

Teste o yank: foo , puxado com yiw .

Linha de teste: Lorem [i]psum dolor sit amet. , com o cursor na i de ipsum .

Seleção de teste: v$ .

"_dP
Loremfoo <-- trailing whitespace and mashed text, bad

"_dp
Lorem foo <-- good

"0p
Lorem foo <-- good

Seleção de teste: vee .

"_dP
Lorem foo sit amet. <-- good

"_dp
Lorem  foosit amet. <-- bad

"0p
Lorem foo sit amet. <-- good
    
por 26.03.2013 / 09:50

Tags