In vim, come posso rimappare <tab> senza rimappare anche <Ctrl + i>?


14

Mi piace usare la scheda per saltare tra le finestre divise, quindi ho map <tab> <C-W><C-W>nel mio .vimrc. Tuttavia ho notato che questo rende Ctrl + I non si comporta più come Ctrl + I, ma come Ctrl + W, Ctrl + W. Come posso rimappare solo <tab>ma non <C-i>?

Risposte:


10

A causa del modo in cui l'input da tastiera viene gestito internamente, questo purtroppo oggi non è generalmente possibile, nemmeno in GVIM. Alcune combinazioni di tasti, come Ctrl+ non alfabetico, non possono essere mappate e non è possibile distinguere Ctrl+ lettera vs. Ctrl+ Shift+ lettera. (A meno che il terminale non invii un codice termcap distinto , cosa che la maggior parte non lo fa.) Nella modalità di inserimento o riga di comando, prova a digitare la combinazione di tasti. Se non accade nulla / è inserito, non è possibile utilizzare quella combinazione di tasti. Questo vale anche per <Tab>/ <C-I>, <CR>/ <C-M>/ <Esc>/ <C-[>ecc. (L'unica eccezione è <BS>/ <C-H>.) Questo è un punto dolente noto e oggetto di varie discussioni su vim_dev e sul canale IRC #vim.

Alcune persone (soprattutto Paul LeoNerd Evans) vogliono risolverlo (anche per console Vim nei terminali che supportano questo), e hanno lanciato varie proposte, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Ma ad oggi, nessuna patch o volontario si è ancora fatto avanti, anche se molti hanno espresso il desiderio di avere questo in una futura versione principale di Vim 8.


1
questo problema di mappatura / riconoscimento dei codici chiave era stato risolto in Vim 8, a partire da ora (anno 2017)? Trovo di poter ancora riprodurre l'esempio di Jon sul mio Vim 8.0
llinfeng

@llinfeng: No, sfortunatamente no. Bram sta attualmente lavorando all'integrazione di un terminale in Vim; questo sembra usare una libreria prodotta da Paul Evans, quindi forse questo alla fine porterà anche a un miglioramento delle chiavi gestite. (Ma questa è pura speculazione in questo momento.)
Ingo Karkat,

0

Non tutte le scorciatoie sono possibili in Vim specialmente se emesse sotto un terminale. Non consiglio di usare una scorciatoia di tabulazione a tale scopo. Ma una soluzione alternativa potrebbe essere la seguente:

" Note: Allows faster switching between windows with "Ctrl+w"! By Questor
nnoremap <silent> <C-w> <C-w><C-w>
inoremap <silent> <C-w> <Esc><C-w><C-w>
vnoremap <silent> <C-w> <Esc><C-w><C-w>

Vedi un esempio di utilizzo in https://github.com/eduardolucioac/groovim/blob/master/.vimrc

[]'S

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.