Сопоставление <C-Tab> в моем vimrc не удается в Ubuntu - PullRequest
23 голосов
/ 22 апреля 2010

Я хочу сопоставить ctrl-tab с: tabn, а ctrl-shift-tab с: tabp.

У меня он работал для gVim в Windows XP, но я переместил его в мой .vimrc в Ubuntu 9.10, и он не работает (vim 7.2).

Вот соответствующий раздел моего .vimrc:

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

<C-t> работает нормально, поэтому отображение клавиши ctrl, похоже, не проблема. Я действительно понятия не имею, с чего начать! Что здесь может пойти не так, если учесть, что под Windows это работает нормально?

Дополнительная информация: Я использую сервер Ubuntu 9.10 с xorg и fluxbox, установленными сверху. Я использую xterm в качестве терминала.

Отображение Ctrl-Tab работает в fluxbox: I может успешно отобразить ctrl-tab и ctrl-shift-tab в моем оконном менеджере; если я начну вкладывать свои xterms, я могу переключаться между этими вкладками, как и ожидалось. Я не уверен, что это значит, но я думаю, что проблема , а не проблема менеджера окон / xorg.

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

Ответ: Это проблема xterm - она ​​не перехватывает и не отправляет уникальный код ключа для ctrl-tab. См. Мой полный ответ ниже для деталей.

Ответы [ 3 ]

31 голосов
/ 23 апреля 2010

Это определенно проблема терминала.

Очевидно, xterm и множество других эмуляторов терминала не перехватывают Ctrl-Tab по умолчанию и просто отправляют сигнал табуляции. На этой вики-странице Vim указано, что ctrl-tab не работает для xterm, Eterm и aterm. Также есть Arch linux form сообщение , в котором утверждается, что это проблема терминала.

Решение можно найти, объединив информацию из этого сообщения в блоге с этой vim wiki для сопоставления кодов клавиш . Суть этого в том, что вам нужно настроить xterm для перехвата и отправки уникального кода для ctrl-tab и ctrl-shift-tab в вашем файле .Xresources, а затем взломать его в свой .vimrc с помощью некоторых необычных сопоставлений. *

Короче говоря, это трудно сделать (все еще не работает здесь), потому что xterm и vim должны быть обмануты. Лично я собираюсь продолжить и использовать другое сопоставление ... эта проблема - серьезная трата времени, и я не думаю, что стоит нажимать, чтобы она заработала!

Спасибо за помощь, ребята.

2 голосов
/ 12 августа 2015

Я использовал сообщения блога и вики из ответа @ nfm и решил:

Поместите это в файл .Xresources (в этом случае вы можете скопировать и вставить):

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

Затем выполните cd ; xrdb .Xresources и перезапустите xterm.


Поместите это в ваш .vimrc:

!!Важно - вместо XXXX вы должны ввести CTRL-V , а затем Esc ИЛИ скопировать и вставить весь текст и запустить %s/\(set <F1[34]>=\)XXXX/\=submatch(1) . "\33"/g, который является копией-pastable (вставьте его с помощью <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

и перезапустите vim.

Готово.

0 голосов
/ 22 апреля 2010

Если вы используете Ubuntu, возможно, у вас включено что-то вроде Compiz.

Я не могу знать наверняка, но вы должны взглянуть на расширения Compiz и определить, какой из них определяет этот ярлык. Однажды у меня была похожая проблема, не с vim, но все же.

Это также может быть X-сервер, который перехватывает некоторые нажатия клавиш (пример: xbindkeys).

...