Um recurso bastante irritante do vim é que, se você estiver no modo de inserção e fizer um preenchimento automático (Ctrl-N), pressione a tecla seta para baixo até o item desejado e pressione a tecla Enter; depois, ele insere o item, mas também insere uma nova linha. então tem que excluir.
Existe uma maneira de selecionar um item da lista de preenchimento automático sem obter uma nova linha indesejada?
vim
autocomplete
Tyler Durden
fonte
fonte
Respostas:
Depende do estado do menu pop-up em que você está (consulte
:help popupmenu-completion
). Entendemos pela sua pergunta que você está no estado 2 (desde que você pressionou as teclas de seta para encontrar uma conclusão). No entanto, o comportamento padrão Enterno estado 2 é inserir a conclusão sem nova linha; o que você descreve normalmente é o comportamento do estado 1 (que é quando você usa Ctrl+ N/ Ctrl+ P.)Uma maneira que funciona consistentemente em todos os estados é usar Ctrl+ Y. Eu gosto de lembrar o Y como "sim, aceite essa palavra". Também é possível simplesmente começar a digitar o texto que deve vir após a palavra concluída, a menos que você tenha remapeado as coisas como na resposta de geedoubleya.
No mesmo contexto, você pode pressionar Ctrl+ Epara cancelar o menu e deixar seu texto como estava antes de invocá-lo. Se você está acostumado com os pares de Ctrl+ Ee Ctrl+ Yem outros contextos (por exemplo, para rolar para cima ou para baixo no modo normal ou para inserir o caractere abaixo ou acima do cursor no modo de inserção), essa é uma maneira de lembrá-lo aqui. Eu acho que você também pode pensar nisso como "sair" do menu ou similar.
Veja
:help popupmenu-keys
para mais.fonte
Pessoalmente eu uso este:
Qualquer pessoa que use o plug-in CtrlP pode achar esse mapeamento conveniente.
fonte
Eu sei que isso é antigo, mas meio que apoiando a resposta de geedoubleya, pois, embora a resposta de echristopherson tenha sido informativa e impressionante, se alguém quiser uma solução rápida e suja:
fonte
Como alternativa ao uso das teclas de seta, ative as teclas
j
&k
para rolar pela lista de preenchimento automático.Fazer isso altera a linha atual para corresponder à palavra selecionada enquanto você rola.
Portanto, você não precisa pressionar enter, pois o cursor ainda está no modo de inserção no final da palavra substituída.
Para habilitar isso, adicione isso ao seu .vimrc (Obrigado a outros em stackoverflow):
Separadamente, em vez de usar as teclas de seta, você pode apenas repetir o
Ctrl-n
que amaldiçoará através das opções (Ctrl-p
para retroceder) e substituir na linha atual conforme ela se move, sem necessidade deEnter
mapeamentos de teclas ou vim.fonte