2010-04-21 4 views
22

Ich möchte ctrl-tab zu: tabn und ctrl-shift-tab zu: tabp.Mapping <C-Tab> in meinem vimrc schlägt in Ubuntu

Ich hatte es funktioniert für gVim in Windows XP, aber zog es zu meiner .vimrc in Ubuntu 9.10 und es funktioniert nicht (vim 7.2).

Hier ist der relevante Abschnitt meines .vimrc:

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

<C-t> funktioniert gut, so die Abbildung der Strg-Taste scheint kein Problem zu sein. Ich habe wirklich keine Ahnung, wo ich anfangen soll! Was könnte hier schief gehen, wenn man bedenkt, dass es unter Windows gut funktioniert hat?

Mehr Info: Ich bin mit Ubuntu 9.10 Server, mit xorg und fluxbox oben installiert. Ich verwende xterm als mein Terminal.

Ctrl-Tab-Mapping funktioniert in Fluxbox: I kann Karte Strg-Tab und Strg-Shift-Tab erfolgreich in meinem Fenster-Manager; Wenn ich meine Xterms einträfe, kann ich wie erwartet zwischen diesen Tabs wechseln. Ich bin mir nicht sicher, was das bedeutet, aber ich denke, das Problem ist nicht ein Fenstermanager/xorg Problem.

Die Schlüssel scheinen nicht auf etwas anderes abgebildet zu sein und können gemeinsam erfolgreich erkannt werden.

Antwort: Es ist ein xterm Problem - es nicht abfangen und einen einzigartigen Schlüsselcode für ctrl-tab senden. Siehe meine vollständige Antwort unten für Details.

+1

Hat C-Tab möglicherweise eine besondere Bedeutung für Ihr Terminal? – Cascabel

+0

Möglicherweise ... Ich werde mich darum kümmern. Ich führe xterm. – nfm

Antwort

30

Es ist definitiv ein Terminalproblem.

Anscheinend Xterm, und viele andere Terminal-Emulatoren, abfangen ctrl-Tab standardmäßig und senden Sie einfach ein Tab-Signal. Diese Vim wiki page besagt, dass ctrl-tab nicht für Xterm, Eterm und Aterm funktioniert. Es gibt auch diese Arch linux form post, die behauptet, dass es ein Terminalproblem ist.

Die Lösung kann durch die Kombination der Informationen aus this blog post mit diesem vim wiki for mapping keycodes finden. Dieser Kernpunkt ist, dass Sie xterm konfigurieren müssen, um einen eindeutigen Code für ctrl-tab und ctrl-shift-tab in Ihrer .Xresources Datei abzufangen und zu senden, dann hacken Sie das in Ihre .vimrc mit einigen funky Mappings.

Lange Rede, kurzer Sinn ist, dass es schwer ist (habe es immer noch nicht funktioniert), weil xterm und vim beide dazu gezwungen werden müssen. Ich werde persönlich weitermachen und ein anderes Mapping verwenden ... dieses Problem ist eine ernste Zeitlümmel und ich denke nicht, dass es sich lohnt, weiterzumachen, damit es funktioniert!

Danke für die Hilfe Jungs.

+0

Wenn Sie als Zwischenlösung versuchen, die Lösung in http://superuser.com/questions/410982/in-vim-how-can- ich-schnell-zwischen-Tabs wechseln. Dies verwendet die Tastenkombination von gt oder gT, die über ein Terminal –

+1

funktioniert, was die alternativen Terminals könnten dieses Problem lösen? – wukong

+0

@wukong das ist auch, was ich denke, ich sehe, dass tmux sowieso mit 'screen-256color' konfiguriert werden sollte, also können wir dies mit einem anderen Terminal arbeiten lassen? – statquant

0

Wenn Sie Ubuntu verwenden, haben Sie wahrscheinlich so etwas wie Compiz aktiviert.

Ich kann nicht sicher wissen, aber Sie sollten sich die Compiz-Erweiterungen ansehen und ob einer von ihnen diese Verknüpfung definiert. Ich hatte einmal ein ähnliches Problem, nicht mit vim, aber immer noch.

Es könnte auch der X-Server sein, der einige Tastenanschläge abfängt (Beispiel: xbindkeys).

+0

Weitere Informationen: Ich benutze Ubuntu Server mit Xorg installiert und Fluxbox als meine Fenster-Manager – nfm

2

habe ich die Blog- und Wiki-Beiträge von @ Antwort des NFM und es gelöst:

Setzen Sie diese in Ihrer .Xresources-Datei (Sie können in diesem Fall copy-paste):

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~") 

Dann tun cd ; xrdb .Xresources und starten Sie xterm neu.


Setzen Sie diese in Ihrem .vimrc:

!! Wichtige - anstelle von XXXX müssen Sie CTRL-V eingeben und dann EscOR copy-paste den ganzen Text und führen %s/\(set <F1[34]>=\)XXXX/\=submatch(1) . "\33"/g die Kopie-verpastbarem ist (setzen Sie sie mit <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 

Und Neustart vim.

Fertig.

+0

Dies funktioniert nicht – statquant

+0

@statquant es funktioniert perfekt für mich. Kannst du schreiben, welcher Teil genau nicht für dich arbeitet? – MichalH

+0

Ich kann Tabs damit nicht wechseln, ich habe die '.Xresources' Datei mit diesen Tablierungen kopiert, dann' cd; xrdb .Xresources' dann aktualisiert die '.vimrc' mit der Änderung von' XXXX' nach '^ [' mit Ihrer Leitung neu gestartet alle Terminals und vim ... das funktioniert nicht – statquant