Conclusão do Vim - sempre suprima a nova linha depois de selecionar uma sugestão com a tecla Enter


11

Às vezes, depois de selecionar uma sugestão (no pop-up de conclusão que aparece ao pressionar Ctrl-N) usando a tecla Enter, o Vim insere uma nova linha e o cursor é movido para a linha seguinte. Isso nem sempre acontece - parece que o Vim tenta ser inteligente sobre isso e só me levará para a próxima linha se achar que é isso que eu gostaria.

No entanto, desejo desabilitar esse comportamento (porque nem sempre é inteligente), para que eu sempre precise ir para a próxima linha pressionando manualmente a tecla Enter. Isso é possível?

Respostas:


14

O que o Vim faz em resposta à digitação da tecla <Enter> durante o uso da inserção de inserção depende do estado do menu de conclusão. O comportamento do menu é descrito aqui:

:help ins-completion-menu

e o comportamento de várias chaves ao usar o preenchimento de inserção é descrito na próxima seção,

:help popupmenu-keys

onde explica que o comportamento da tecla <Enter> depende do estado do menu. Pelo que entendi, digitar <Enter> insere uma nova linha, exceto no caso em que você selecionou uma correspondência no menu usando as teclas do cursor.

A melhor maneira de evitar a inserção de uma nova linha quando você não deseja uma é finalizar ou fazer uma seleção usando outra tecla, como Ctrl-Y ou Ctrl-E.

Veja também

:help complete_CTRL-Y

e para toda a descrição, se a conclusão do modo de inserção,

:help ins-completion

4

Você pode adicionar esse mapeamento ao seu arquivo .vimrc:

inoremap <expr> <CR> pumvisible() ? "\<C-Y>" : "\<CR>"

Ele mapeará a tecla de retorno no modo de inserção para inserir CTRL-Y quando o menu pop-up estiver visível. CTRL-Y seleciona o item atualmente selecionado no menu sem inserir uma nova linha. Caso contrário, fará com que a tecla de retorno atue normalmente.


1
Você pode explicar o que esse código faz e como ele resolve o problema dado pelo OP? Código inexplicável pode parecer não confiável e perigoso para os usuários.
BwDraco 16/07/2015

0

Adicionei isso ao .vimrc e agora ele se comporta como eu quero:

noremap pumvisible ()? "\": ""

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.