Карта shift-tab в vim для обратной вкладки в Vim
Я сделал несколько поисков и нашел множество информации о привязке ключей в vim, но я не могу точно узнать, как сопоставить shift-tab. Или какую команду мне нужно сопоставить, чтобы он "переместил назад".
Это то, что у меня есть на данный момент:
map <S-tab> <S-,><S-,>
Возможно релевантная информация:
Я запускаю Debian с Terminal 2.22.3. с VIM-Vi IMproved 7.1
Ответы
Ответ 1
У Vim уже есть встроенные команды клавиш для режима вставки, чтобы сдвинуть текущую строку влево или вправо &shiftwidth
. Они (в режиме вставки):
Ctrl-t
: shift right (мнемоническая вкладка)
Ctrl-d
: сдвиг влево (мнемонический "de-tab" )
Если вы все еще хотите использовать shift-tab, вот как вы это делаете:
" for command mode
nnoremap <S-Tab> <<
" for insert mode
inoremap <S-Tab> <C-d>
Ответ 2
Отладка, почему shift-tab
в vim не выполняет обратную вкладку в Vim
Если вы поместили код inoremap <S-Tab> <Cd>
в ваш .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 предполагает, что ваше приложение Terminal разрешило Shift+Tab
проходить в оболочку. Существует область, которая определяет, какие комбинации клавиш перехватываются для выполнения действий над оболочкой, которые передаются приложению, находящемуся спереди. Для меня это inputrc
но Mac и Windows имеют разные области. Вам нужно будет найти этот файл и очистить все, что может сожрать вашу Shift+Tab
и стереть это, или добавить правило, которое говорит, что пройти.
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
все ваши файлы конфигурации vim, такие как .vimrc
, .profile
и все, что находится в .vim
. Проблема может быть даже с vim или в /etc
Вы запускаете vanilla vim с помощью vim -u NONE
и убедитесь, что вы используете vim. Поведение Vim по умолчанию - прямой проход. Так что, если Shift + Tab ничего не делает, то ошибка в vi.
-
Удалите vim с пустыми конфигурационными файлами/каталогами и переустановите. Если это не работает, то ваша операционная система прослушивается. Переустановите операционную систему. Если это не работает, выбросьте компьютер в мусорное ведро.
Ответ 3
С вкладками Vim можно использовать следующие параметры:
map <TAB> <ESC>gt<CR>
map <S-TAB> <ESC>gT<CR>