2010-04-21 5 views
22

Voglio mappare ctrl-tab a: tabn e ctrl-shift-tab a: tabp.Mapping <C-Tab> nel mio vimrc fallisce in Ubuntu

Ho funzionato per gVim in Windows XP, ma lo ho spostato nel mio .vimrc in Ubuntu 9.10 e non funziona (vim 7.2).

Ecco la sezione dedicata del mio Vimrc:

nmap <C-Tab> :tabn<CR> 
nmap <C-S-Tab> :tabp<CR> 
nmap <C-t> :tabnew<CR> 

<C-t> funziona bene, in modo da mappare il tasto Ctrl non sembra essere un problema. Non ho davvero idea da dove cominciare! Cosa potrebbe esserci di sbagliato qui, considerando che ha funzionato bene sotto Windows?

Maggiori informazioni: Io corro Ubuntu Server 9.10, con xorg e fluxbox installato sulla parte superiore. Sto usando xterm come mio terminale.

Ctrl-Tab mappatura funziona in Fluxbox: Ho posso mappa ctrl-tab e Ctrl-Shift-Tab con successo nel mio window manager; se inizio a tabellare i miei xterm, posso scorrere queste schede come previsto. Non sono sicuro di cosa significhi, ma penso che il problema sia non un problema di window manager/xorg.

Le chiavi non sembrano essere mappate a qualcos'altro e possono essere riconosciute insieme con successo.

Risposta: E 'una questione xterm - non intercettare e inviare un codice chiave unica per ctrl-tab. Vedere la mia risposta completa qui sotto per i dettagli.

+1

La C-Tab ha forse un significato speciale per il terminale? – Cascabel

+0

Forse ... ci penserò. Sto eseguendo xterm. – nfm

risposta

30

È sicuramente un problema terminale.

Apparentemente xterm e molti altri emulatori di terminale, non intercettano la scheda ctrl per impostazione predefinita e inviano semplicemente un segnale di tabulazione. Questo Vim wiki page afferma che ctrl-tab non funziona per xterm, Eterm e aterm. C'è anche questo Arch linux form post che afferma che si tratta di un problema terminale.

La soluzione si possono trovare combinando le informazioni da this blog post con questo vim wiki for mapping keycodes. Questo è il motivo per cui devi configurare xterm per intercettare e inviare un codice univoco per ctrl-tab e ctrl-shift-tab nel tuo file .Xresources, quindi modificarlo nel tuo .vimrc con alcuni mapping funky.

Per farla breve è che è difficile da fare (ancora non ce l'ha fatta funzionare qui) perché xterm e vim hanno entrambi bisogno di essere indotti a farlo. Personalmente andrò avanti e userò un'altra mappatura ... questo problema è un vero rompicapo del tempo e non penso che valga la pena insistere per farlo funzionare!

Grazie per l'aiuto ragazzi.

+0

Se si desidera provare provvisoriamente la soluzione in http://superuser.com/questions/410982/in-vim-how-can- passare rapidamente-tra-schede. Questo utilizza la combinazione di chiavi di gt o gT che sembra funzionare attraverso un terminale –

+1

quali sono i terminali alternativi in ​​grado di risolvere questo problema? – wukong

+0

@wukong è anche quello che sto pensando, vedo che tmux dovrebbe essere configurato con 'screen-256color' comunque, quindi possiamo farlo funzionare con qualche altro terminale? – statquant

0

Se stai usando Ubuntu, probabilmente hai qualcosa come Compiz abilitato.

Non posso saperlo con certezza, ma dovresti dare un'occhiata alle estensioni di Compiz e se su di esse viene definita tale scorciatoia. Ho avuto un problema simile una volta, non con Vim, ma ancora.

Potrebbe anche essere il server X che intercetta alcune sequenze di tasti (esempio: xbindkeys).

+0

Ulteriori informazioni: utilizzo il server Ubuntu con xorg installato e fluxbox come gestore delle finestre – nfm

2

ho usato il blog e wiki messaggi di @ risposta di NFM e risolto:

mettere questo nel file .Xresources (è possibile copiare-incollare in questo caso):

xterm*VT100.Translations: #override \ 
      Ctrl ~Shift <Key>Tab: string(0x1b) string("[27;5;9~") \n\ 
      Ctrl Shift <Key>Tab: string(0x1b) string("[27;6;9~") 

Poi do cd ; xrdb .Xresources e riavviare xterm.


mettere questo nel vostro .vimrc:

!! Importante - al posto di XXXX è necessario digitare CTRL-V e poi EscO copia-incollare il testo completo ed eseguire %s/\(set <F1[34]>=\)XXXX/\=submatch(1) . "\33"/g che è copia-pastable (inserirla con <CTRL-R> +).

set timeout timeoutlen=1000 ttimeoutlen=100 
set <F13>=XXXX[27;5;9~ 
nnoremap <F13> gt 
set <F14>=XXXX[27;6;9~ 
nnoremap <F14> gT 

E riavviare vim.

Fatto.

+0

Questo non funziona – statquant

+0

@statquant funziona perfettamente per me. Puoi scrivere quale parte non funziona esattamente per te? – MichalH

+0

Non posso cambiare tab con questo, ho copiato il file '.Xresources' con quelle tabulazioni, quindi' cd; xrdb .Xresources' poi aggiornato '.vimrc' usando la modifica da' XXXX' a '^ [' con la tua linea riavviata tutti i terminali e vim ... non funziona – statquant