3

У меня серьезная проблема. Обычно я использую редактор vim, хотя я не могу отобразить Ctrl + Tab. Я хочу переключать вкладки с помощью Ctrl + Tab (Ctrl + Shift + Tab). В xterm это отображение включено, и действие будет использовано. Но в gnome-терминал tab - escape-последовательность, которая только что появилась. Подскажите пожалуйста, как переключать вкладки в vim с помощью gnome-терминала.

3 ответа3

6

Из-за способа обработки ввода с клавиатуры, к сожалению, сегодня это вообще невозможно, даже в 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.

3

Проблема в том, что в терминале символ табуляции - ^I (Control- I). Это означает, что нажатие клавиши управления при нажатии клавиши Tab - это не то, что даже терминал не хочет передавать в Vim. [1] Он просто отправляет обычный символ табуляции.

GVim может поддерживать это, потому что ему не нужно полагаться на терминал, чтобы сообщать ему, какие клавиши нажимаются в какой комбинации - он имеет более прямой доступ к событиям клавиатуры, поэтому он не видит проблем с измененными специальными клавишами.

Я предлагаю вам найти другой ключ для сопоставления, чтобы вы могли иметь последовательность.

[1] Насколько я понимаю, с "современными" терминальными эмуляторами это уже не так, но это было так долго, что нужно преодолеть огромное препятствие, потому что библиотека терминалов, которую использует Vim (Ncurses), даже не работает обработать это событие, поэтому, хотя технически терминал может его поддерживать, Vim не может этого сделать, потому что библиотечный API, на который он опирается, не может. Примерно раз в год в списке разработчиков Vim шла серьезная дискуссия о том, как решить эту проблему различными способами, в том числе перейти на более функциональный API, но из этого ничего не выйдет.

0

Ближайший ответ, который у меня есть для этого - создать Leader + Tab и Leader + Shift + Tab

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

Я сопоставляюсь мой Лидера к, (запятая), поэтому он печатает, + Tab

Однако они не очень хорошо работают. Вы не можете удерживать Leader и продолжать нажимать Tab, чтобы прокручивать вкладки. Это также не относится к поведению MRU (недавно использовавшемуся).

Для пояснения я использую «буферы» вместо «страниц вкладок», так как считаю, что они намного лучше соответствуют тому, для чего другие редакторы используют вкладки.

Вместо этого вы можете попробовать следующее:

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

Это открывает команду ex, а затем вы можете нажать Tab, чтобы начать прокрутку буферов. Затем вы также можете использовать и для перемещения вперед и назад.

При таком подходе вы также можете начать вводить часть открытого буфера, а нажатие клавиши Tab будет циклически перебирать отфильтрованный список открытых буферов.

Лично я просто сопоставляю Leader + Tab, чтобы дать мне базовое поведение MRU:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .