Como posso construir um mapeamento vim para executar Ctrl-N, mas como se a palavra-chave fosse incluída '-'?

1

No Vim, quando estou programando, muitas vezes quero que o Ctrl-N se comporte como se - fizesse parte de uma palavra-chave; em outras palavras, inclua em iskeyword . No entanto, gostaria de criar um novo mapeamento de teclado para isso e ter o Ctrl-N para manter o comportamento existente.

Eu tentei isso:

inoremap <C-B> <C-O>:set iskeyword+=-<CR><C-N>

... que funciona, mas a opção iskeyword inclui o - extra depois, o que não é o comportamento desejado.

Isso também funciona:

inoremap <C-B> <C-O>:set iskeyword+=-<CR><C-N><C-O>:set iskeyword-=-<CR>

... mas o menu pop-up é eliminado pelo <C-O> .

Existe uma maneira de eu ter meu bolo e comê-lo? O menu pop-up aparece e permanece no lugar, mas também define iskeyword como depois?

Alternativamente, existe outra maneira de resolver esse problema?

    
por Andrew Ferrier 15.07.2014 / 00:30

1 resposta

2

Isso parece funcionar.

function! CustomComplete(type)
    set iskeyword+=-
    return a:type
endfunction
inoremap <expr> <C-B> CustomComplete("<C-N>")
autocmd CompleteDone * set iskeyword-=-

Usamos um mapeamento de expressão para executar a função que define iskeyword toda vez que é executada (não parece ser um problema. Eu também não encontrei um autocmd antes da conclusão.) O valor de retorno de a função é então usada como substituta do mapeamento. Nesse caso, você queria o comportamento <C-N> . Em seguida, para remover o conjunto - do conjunto iskeyword, usamos o CompleteDone autocomand, o que acontece após a conclusão da conclusão.

Também experimentei os dois mapeamentos. O primeiro deles não funciona como esperado, uma vez que também possui <C-O> , o que mata a janela de conclusão.

    
por 15.07.2014 / 06:06