Strg+TAB funktioniert in vim mit Gnome-Terminal nicht

Strg+TAB funktioniert in vim mit Gnome-Terminal nicht

Ich habe ein ernstes Problem. Normalerweise verwende ich vim als Editor, aber ich kann die Aktion Strg+Tab nicht zuordnen. Ich möchte mit Strg+Tab (Strg + Umschalt + Tab) zwischen Tabs wechseln. In xterm ist diese Zuordnung aktiviert und die Aktion wird verwendet. Aber im Gnome-Terminal ist gerade Tab als Escape-Sequenz erschienen. Bitte erklären Sie mir, wie ich in vim mit Gnome-Terminal zwischen Tabs wechseln kann.

Antwort1

Aufgrund der internen Verarbeitung der Tastatureingaben ist dies heute leider nicht allgemein möglich, auch nicht in GVIM. Einige Tastenkombinationen, wie Ctrl+ nicht-alphabetisch, können nicht zugeordnet werden, und Ctrl+ Buchstabe und Ctrl+ Shift+ Buchstabe können nicht unterschieden werden. (Sofern Ihr Terminal keine eindeutigeBegriffserklärungCode dafür, was die meisten nicht tun.) Versuchen Sie im Einfüge- oder Befehlszeilenmodus, die Tastenkombination einzugeben. Wenn nichts passiert, wird / eingefügt, Sie können diese Tastenkombination nicht verwenden. Dies gilt auch für <Tab>/ <C-I>, <CR>/ <C-M>/ <Esc>​​/ <C-[>usw. (Die einzige Ausnahme ist <BS>/ <C-H>.) Dies ist ein bekannter Schwachpunkt und Gegenstand verschiedener Diskussionen auf vim_dev und dem IRC-Kanal #vim.

Einige Leute (vor allem Paul LeoNerd Evans) möchten dies beheben (auch für Konsolen-Vim in Terminals, die dies unterstützen) und haben verschiedene Vorschläge gemacht, vgl.http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Bis heute haben sich jedoch weder Patches noch Freiwillige gemeldet, obwohl viele den Wunsch geäußert haben, dies in einer zukünftigen Hauptversion von Vim 8 zu haben.

Antwort2

Das Problem ist, dass in einem Terminal ein Zeichen ( - ) Tabist . Das bedeutet, dass das Drücken von Strg und Tabulatortaste nicht einmal an Vim weitergeleitet wird. [1] Es sendet einfach ein normales Tabulatorzeichen.^IControlI

GVim kann dies unterstützen, da es sich nicht darauf verlassen muss, dass das Terminal ihm mitteilt, welche Tasten in welcher Kombination gedrückt werden. GVim hat einen direkteren Zugriff auf Tastaturereignisse und kann daher geänderte Sondertasten problemlos erkennen.

Ich schlage vor, dass Sie einen anderen Schlüssel zum Zuordnen finden, damit eine Konsistenz gewährleistet ist.

[1] Meines Wissens ist dies bei "modernen" Terminalemulatoren nicht mehr der Fall, aber esWarDas gilt schon so lange, dass es eine große Hürde in Bezug auf die Altlasten zu überwinden gibt, da die von Vim verwendete Terminalbibliothek (Ncurses) dieses Ereignis nicht einmal verarbeitet. Obwohl das Terminal es also technisch unterstützen könnte, kann Vim es nicht, da die Bibliotheks-API, auf die es sich stützt, es nicht kann. Ungefähr einmal im Jahr gibt es in der Vim-Entwicklerliste ernsthafte Diskussionen darüber, dieses Problem mit verschiedenen Mitteln zu beheben, einschließlich der Umstellung auf eine leistungsfähigere API, aber es kommt nie etwas dabei heraus.

Antwort3

Die beste Antwort, die ich hierfür habe, ist die Erstellung von Leader+ Tabund Leader+ Shift+Tab

map <leader><Tab> :bnext<cr>
map <leader><S-Tab> :bprevious<cr>

Ich habe mein Leaderan ,(Komma) zugeordnet, also tippe ich ,+Tab

Sie funktionieren jedoch nicht sehr gut. Sie können nicht Leadergedrückt halten und weiter drücken, Tabum durch die Registerkarten zu scrollen. Dies entspricht auch nicht dem MRU-Verhalten (zuletzt verwendet).

Zur Klarstellung: Ich verwende „Puffer“ anstelle von „Registerkartenseiten“, da diese meiner Meinung nach besser dem Konzept entsprechen, wofür andere Editoren Registerkarten verwenden.

Stattdessen können Sie Folgendes versuchen:

map <leader><Tab> :b<Space>

Dadurch wird der Befehl „ex“ geöffnet. Anschließend können Sie mit der Taste „ Tabscrollen“ durch die Puffer blättern. Sie können anschließend auch mit „ und „ vor- und zurückgehen.

Bei dieser Vorgehensweise können Sie auch mit der Eingabe des Teils eines offenen Puffers beginnen und durch Drücken Tabvon die gefilterte Liste der offenen Puffer durchlaufen.

Persönlich verwende ich jedoch einfach „ Leader+“ Tab, um das grundlegende MRU-Verhalten zu erhalten:

map <leader><Tab> :b#<cr>

verwandte Informationen