![Ctrl+TAB не работает в vim с gnome-terminal](https://rvso.com/image/1416708/Ctrl%2BTAB%20%D0%BD%D0%B5%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D0%B2%20vim%20%D1%81%20gnome-terminal.png)
У меня серьезная проблема. Обычно я использую редактор vim, хотя я не могу сопоставить действие ctrl+tab. Я хочу переключать вкладки с помощью ctrl+tab (ctrl + shift + tab). В xterm это сопоставление включено, и действие будет использоваться. Но в gnome-terminal tab как escape-последовательность только что появилась. Пожалуйста, скажите мне, как переключать вкладки в vim с помощью gnome-terminal.
решение1
Из-за того, как клавиатурный ввод обрабатывается внутри, это, к сожалению, в настоящее время не является возможным, даже в GVIM. Некоторые комбинации клавиш, такие как Ctrl+ неалфавитные, не могут быть отображены, и Ctrl+ буква против Ctrl+ Shift+ буква не могут быть различены. (Если только ваш терминал не отправляет отдельныйtermcap(Код для него, который большинство не делает.) В режиме вставки или командной строки попробуйте ввести комбинацию клавиш. Если ничего не происходит / вставляется, вы не можете использовать эту комбинацию клавиш. Это также относится к <Tab>
/ <C-I>
, <CR>
/ <C-M>
/ <Esc>
/ <C-[>
и т. д. (Единственным исключением является <BS>
/ <C-H>
.) Это известная болевая точка и предмет различных обсуждений на vim_dev и канале IRC #vim.
Некоторые люди (прежде всего Пол ЛеоНерд Эванс) хотят исправить это (даже для консольного Vim в терминалах, которые это поддерживают), и выдвигают различные предложения, см.http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
Однако на сегодняшний день никаких патчей или добровольцев пока не нашлось, хотя многие выразили желание включить это в будущий основной релиз Vim 8.
решение2
Проблема в том, что в терминале Tabсимволом является ^I
( Control- I). Это означает, что нажатие клавиши control при нажатии клавиши tab — это то, что терминал даже не удосуживается передать в Vim. [1] Он просто отправляет обычный символ табуляции.
GVim может это поддерживать, поскольку ему не нужно полагаться на терминал, чтобы узнать, какие клавиши нажимаются в какой комбинации — у него есть более прямой доступ к событиям клавиатуры, поэтому у него нет проблем с обнаружением измененных специальных клавиш.
Я предлагаю вам найти другой ключ к карте, чтобы обеспечить последовательность.
[1] Насколько я понимаю, с «современными» эмуляторами терминала это уже не так, но этобылверно так долго, что есть огромное препятствие, которое нужно преодолеть, поскольку библиотека терминала, которую использует Vim (Ncurses), даже не обрабатывает это событие, поэтому, хотя терминал технически может поддерживать его, Vim не может, потому что API библиотеки, на которую он опирается, не может. Примерно раз в год в списке разработчиков Vim происходят серьезные обсуждения по поводу исправления этой проблемы различными способами, включая переход на более мощный API, но из этого ничего не выходит.
решение3
Самый близкий ответ, который у меня есть, — это создать Leader+ Tabи Leader+ Shift+Tab
map <leader><Tab> :bnext<cr>
map <leader><S-Tab> :bprevious<cr>
Я сопоставил свой Leaderс ,(запятая), поэтому он печатает ,+Tab
Однако они не очень хорошо работают. Вы не можете Leaderудерживать и продолжать нажимать Tab, чтобы прокручивать вкладки. Это также не относится к поведению MRU (последнее использованное).
Для ясности я использую термин «буферы» вместо «страницы вкладок», поскольку считаю, что они гораздо лучше соответствуют концепции использования вкладок в других редакторах.
Вместо этого вы можете попробовать следующее:
map <leader><Tab> :b<Space>
Это открывает команду ex, и затем вы можете нажать , Tabчтобы начать прокручивать буферы. Вы также можете использовать ←и →, чтобы перемещаться вперед и назад.
При таком подходе вы также можете начать вводить часть открытого буфера, а нажатие клавиши Tabбудет циклически перебирать отфильтрованный список открытых буферов.
Лично я просто сопоставляю Leader+ Tab, чтобы получить базовое поведение MRU:
map <leader><Tab> :b#<cr>