Posso fazer o filtro Vim digitar os comandos ex?

0

Eu sei que isso provavelmente é melhor para resolver por não digitar superficialmente em primeiro lugar, mas eu só acho que seria muito bom ter.

Desde que usei o Vim por um tempo, o ;w (mapeei o modo normal ; para : ) é um reflexo para mim. No entanto, o que eu não gosto é que às vezes eu digito rápido e isso faz com que coisas ruins aconteçam.

Dê uma olhada no meu vimrc ...

"""" Commenting out cmaps because cmap applies when e.g. typing in (/)-search mode
" " prevent common typos from actually writing files to disk
" cmap wq1 wq!
" cmap w1 w!
" cmap q1 q!
" cmap qa1 qa!
" cmap e1 e!
"
" cmap w; w
"
" cmap qw wq
" cmap qw! wq!
" cmap qw1 wq!
"
" " and more combinatorially exploding goodness for dealing with flubbing the
" " enter key
" cmap wq\ wq
" cmap wq1\ wq!
" cmap wq!\ wq!
" cmap w\ w
" cmap w1\ w!
" cmap w!\ w!

Isso continua por 50 ou mais linhas.

Eles são todos comentados porque cmap se aplica ao usar / para pesquisar. Isso é um problema.

E isso nem cobre os casos em que escrevo :w e, em seguida, acontece a mistura de um caractere especial depois disso, e isso de alguma forma faz com que o vim grave o buffer em um arquivo nomeado após esse caractere. Ótima maneira de perder algum trabalho.

Alguma ideia? Isso vai exigir que eu edite o código-fonte do vim, não é?

    
por Steven Lu 09.12.2014 / 08:11

1 resposta

2

Você está certo, a desvantagem de :cmap é que se aplica a todos os modos de linha de comando, portanto, também impede que você pesquise por essas sequências de caracteres.

Uma solução é verificar o tipo do modo de linha de comando, por meio de um mapeamento de expressão:

cnoremap <expr> w1 getcmdtype() == ':' ? 'w!' : 'w1'

Se você for esperto, você pode fazer meta-programação e definir todos os seus mapeamentos em um loop, apenas passando as strings de origem e destino.

Mesmo esses mapeamentos modificados ainda não permitem que você digite essas strings mapeadas, por exemplo, como argumentos de comando (assim você não pode facilmente :w w1 , apenas escapando do último via <C-V> ), embora.

Plugin

O plug-in cmdalias.vim - Criar aliases para comandos do Vim também verifica a posição do comando e, portanto, manipula argumentos. Ele também oferece um conveniente comando :Alias , então você não precisa fazer metaprogramação.

    
por 09.12.2014 / 09:06

Tags