Come posso costruire un mapping vim per eseguire Ctrl-N, ma come se la parola chiave includesse '-'?


1

In Vim, quando sto programmando, spesso voglio che Ctrl-N si comporti come se -facesse parte di una parola chiave; in altre parole, includilo in iskeyword. Tuttavia, mi piacerebbe creare un nuovo keymapping per questo e fare in modo che Ctrl-N mantenga il suo comportamento esistente.

Ho provato questo:

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

... che tipo di funzionamento funziona, ma l'opzione iskeyword include il extra in -seguito, che non è il comportamento desiderato.

Anche questo funziona in qualche modo:

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

... ma il menu a comparsa viene ucciso dal <C-O>.

C'è un modo in cui posso avere la mia torta e mangiarla? Il menu a comparsa viene visualizzato e rimane in posizione, ma iskeywordripristina anche quello che era in seguito?

In alternativa, c'è un altro modo di risolvere questo problema?

Risposte:


2

Questo sembra funzionare.

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

Usiamo un mapping di espressioni per eseguire la funzione che imposta iskeywordogni volta che viene eseguita (non sembra essere un problema. Inoltre, non ho trovato un autocmd prima del completamento dell'ins ins.) Il valore restituito della funzione viene quindi utilizzato come la sostituzione per la mappatura. In questo caso volevi un <C-N>comportamento. Quindi per rimuovere set -da set iskeyword usiamo l' CompleteDoneautomand che si verifica dopo che l'ins-completamento è terminato.


Inoltre, ho provato entrambi i tuoi mapping, il primo non funziona davvero come previsto poiché ha anche il risultato di <C-O>uccidere la finestra di completamento.


Perfetto, grazie! - sembra funzionare. L'intuizione qui stava usando la funzione wrapper in giro C-N(cosa che non sapevo che potessi fare) e l' CompleteDoneevento. Grazie - non l'avrei capito da solo!
Andrew Ferrier,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.