Сопоставить Shift-Tab в Vim с обратной вкладкой в ​​Vim - PullRequest
42 голосов
/ 22 января 2011

Я провел некоторый поиск и нашел много информации о связывании ключей в vim, но не могу точно выяснить, как отобразить shift-tab. Или какую команду мне нужно сопоставить для того, чтобы она была «задом наперед».

Это то, что у меня есть на данный момент:

map <S-tab> <S-,><S-,>

Возможно соответствующая информация: Я использую Debian с терминалом 2.22.3. с VIM - Vi IMproved 7.1

Ответы [ 3 ]

89 голосов
/ 22 января 2011

Vim уже имеет встроенные команды клавиш для режима вставки для смещения текущей строки влево или вправо &shiftwidth. Они (в режиме вставки):

Ctrl-t: сдвиг вправо (мнемоническая «табуляция»)

Ctrl-d: сдвиг влево (мнемосхема "de-tab")

Если вы все еще хотите использовать Shift-Tab, вот как вы это делаете:

" for command mode
nnoremap <S-Tab> <<
" for insert mode
inoremap <S-Tab> <C-d>
3 голосов
/ 12 января 2019

Отладка, почему shift-tab в vim не выполняет обратную вкладку в Vim

Если вы поместили код inoremap <S-Tab> <C-d> в .vimrc, а vim все еще не работаетОтвечая в режиме вставки, это означает, что ваша Shift-tab перехватывается, сожрается и игнорируется где-то в опасном 4-х частичном путешествии между вашей клавиатурой и vim.Оставайтесь холодными, чтобы понять, где ваш Shift-Tab становится бесхозным.

Четыре этапа Shift + Tab между клавиатурой и vim

Клавиатура -> Операционная система

Первым шагом на пути нажатия клавиш является операционная система, которая перехватывает все ключи и останавливает некоторые из них для выполнения действий для операционной системы.Например, Alt+Tab, что часто означает «изменить фокус текущего окна на следующее».Если вы отправите Alt+Tab в vim, vim не ответит, потому что операционная система его поглотила.Вы должны найти эту область сопоставления клавиш в вашей операционной системе.Windows, Mac и Linux все разные, и у них есть разные программы, которые управляют тем, какие ключи перехвачены, а какие - приложениям.Найдите эту область и убедитесь, что ваш Shift+tab настроен для прохода через используемый вами терминал.

Операционная система -> Приложение терминала

Шаг 2 предполагает, чтоОС позволила вашему Shift+Tab пройти к вашему терминальному приложению, которое имеет фокус.Ваше терминальное приложение должно иметь опцию меню конфигурации (большинство из них имеют более одного, которые сражаются друг с другом) в Настройки -> ярлыки или настройки -> раскладки клавиш.Существуют сотни терминальных приложений, и у каждого есть разные идеологии, для которых нажатия клавиш можно перехватывать и поглощать и выполнять какие-то действия, встроенные в приложение, или которые передаются в оболочку.Найдите эту область и убедитесь, что ваш Shift+tab имеет право проходить и проходит через него.

Приложение терминала -> ваша оболочка

Шаг 3 предполагает, что ваше приложение терминалапозволил Shift+Tab пройти в оболочку.Существует область, которая определяет, какие комбинации клавиш перехватываются для выполнения действий над оболочкой, которые передаются приложению, находящемуся спереди.Для меня это inputrc, но Mac и Windows имеют разные области.Вам нужно будет найти этот файл и очистить все, что может сожрать ваш Shift+Tab, и стереть его, или добавить правило, которое говорит: pass through.

Shell -> vim

Теперь мы на уровне Vim, где .vimrc может слышать, перехватывать или ретранслировать Shift+Tab на следующий шаг в цепочке команд и делать все, что вы хотите, пока он это делает.У Vim есть ключевое слово map, которое управляет этим.

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

Инструкции по цепочке отладки, чтобы определить, где ваш Shift+Tab потерян:

  1. Убедитесь, что ваша ОС не сожрала вкладку Shift +и выполнение бездействия.Попробуйте другое приложение, такое как Eclipse, Browser или Notepad, и посмотрите, выполняет ли Shift + Tab какое-либо действие.Если это произойдет, то ОС, скорее всего, проходит через ваше Shift+tab без изменений для приложений.

  2. Убедитесь, что ваше терминальное приложение может получать и получает Shift+Tab.Проверьте это, перейдя в настройки -> Ярлыки и сотрите любую раскладку клавиш, которая имеет Shift или Tab в имени, затем создайте новую раскладку клавиш, которая перехватывает Shift+tab и выполняет какое-то простое действие, например new tab, не имеет значения.Сохраните его, поместите фокус в терминал и нажмите его, если появляется новая вкладка, тогда терминал может слышать и отвечать.

  3. Убедитесь, что ваш терминал проходит через Shift + Tab для оболочки.Удалите все, что пахнет Tab или Shift в Настройках -> раскладки клавиш и Настройки -> Ярлыки.Действие по умолчанию (должно быть) ничего не делать и пройти.

  4. Откройте любую другую программу оболочки, например nano, ed или emacs. Если любой из них выполняет какое-либо действие, когда вы нажимаете Shift + Tab, то вполне вероятно, что терминал проходит через Shift + Tab для vim.

  5. На данный момент мы знаем, что vi / vim получает Shift + Tab, но не отвечает на него. Чтобы изолировать проблему, удалите все ваши файлы конфигурации vim, такие как .vimrc, .profile и все, что находится под .vim. Проблема может быть даже с vim или под /etc Вы запускаете vanilla vim с помощью vim -u NONE и убедитесь, что вы используете vim. Поведение Vim по умолчанию - прямой проход. Так что если Shift + Tab ничего не делает, значит, ошибка в vi.

  6. Удалите vim с пустыми конфигурационными файлами / каталогами и переустановите. Если это не работает, то ваша операционная система прослушивается. Переустановите операционную систему. Если это не сработает, выбросьте компьютер в мусорное ведро.

0 голосов
/ 05 марта 2013

С вкладками Vim можно использовать следующее:

map <TAB> <ESC>gt<CR> 
map <S-TAB> <ESC>gT<CR>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...