Отладка, почему 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
потерян:
Убедитесь, что ваша ОС не сожрала вкладку Shift +и выполнение бездействия.Попробуйте другое приложение, такое как Eclipse, Browser или Notepad, и посмотрите, выполняет ли Shift + Tab какое-либо действие.Если это произойдет, то ОС, скорее всего, проходит через ваше Shift+tab
без изменений для приложений.
Убедитесь, что ваше терминальное приложение может получать и получает Shift+Tab
.Проверьте это, перейдя в настройки -> Ярлыки и сотрите любую раскладку клавиш, которая имеет Shift или Tab в имени, затем создайте новую раскладку клавиш, которая перехватывает Shift+tab
и выполняет какое-то простое действие, например new tab
, не имеет значения.Сохраните его, поместите фокус в терминал и нажмите его, если появляется новая вкладка, тогда терминал может слышать и отвечать.
Убедитесь, что ваш терминал проходит через Shift + Tab для оболочки.Удалите все, что пахнет Tab или Shift в Настройках -> раскладки клавиш и Настройки -> Ярлыки.Действие по умолчанию (должно быть) ничего не делать и пройти.
Откройте любую другую программу оболочки, например nano
, ed
или emacs
. Если любой из них выполняет какое-либо действие, когда вы нажимаете Shift + Tab, то вполне вероятно, что терминал проходит через Shift + Tab для vim.
На данный момент мы знаем, что vi / vim получает Shift + Tab, но не отвечает на него. Чтобы изолировать проблему, удалите все ваши файлы конфигурации vim, такие как .vimrc
, .profile
и все, что находится под .vim
. Проблема может быть даже с vim или под /etc
Вы запускаете vanilla vim с помощью vim -u NONE
и убедитесь, что вы используете vim. Поведение Vim по умолчанию - прямой проход. Так что если Shift + Tab ничего не делает, значит, ошибка в vi.
Удалите vim с пустыми конфигурационными файлами / каталогами и переустановите. Если это не работает, то ваша операционная система прослушивается. Переустановите операционную систему. Если это не сработает, выбросьте компьютер в мусорное ведро.