Я нахожусь в несколько необычном положении использования двух разных раскладок клавиатуры на регулярной основе ( Programmers-Dvorak и Turkish-F ). Эти макеты сильно отличаются друг от друга, и я могу быть опытным в VIM только с одним набором мышечных воспоминаний. Я довольно хорошо разбираюсь в командах vim в раскладке Dvorak, но практически невозможно использовать, если моя клавиатура находится в раскладке Turkish-F. К сожалению, я регулярно редактирую файлы на английском, турецком и даже смешанных языках. Мое знание таково, что я могу довольно хорошо набирать любой язык на соответствующей раскладке клавиатуры, но мой мозг отказывается соединять их и набирать даже несколько букв слова на турецком языке из раскладки Дворак или наоборот.
У меня есть привязки двух клавиш для изменения макета в Xorg, но даже это оставляет мне неловкий рабочий процесс в vim при редактировании файлов на разных языках:
<vim commands…>i<switch to tr>…content…<escape><switch to en><vim commands…>
Я хотел бы иметь возможность сократить это до чего-то вроде:
<vim commands…><leader>i…content…<escape><vim commands…>
... такой, что использование <leader>i
устанавливает множество :imap
значений для эмуляции турецкой раскладки без изменения раскладки системной клавиатуры. В то же время i
переключился бы в режим вставки, но без дополнительных :imap
значений. Сами значения просты, мне просто нужно сопоставление алфавита примерно так:
:imap a u
:imap A U
:imap o i
:imap O İ
"etc.
Вопрос заключается в том , как установить два режима вставки, один нормальный режим вставки и один псевдо вставки режим , который идентичен для связки отображений , кроме, и как я могу вызвать эти режимы с <leader>i
, <leader>a
и т.д.?
InsertEnter
иInsertLeave
autocmds, которые вы можете использовать для автоматического переключения раскладок. В частности,InsertLeave
вы можете проверить, является ли он турецким, если он есть, переключиться на Дворжак, установить флаг, и при вводе вставки снова переключиться обратно на турецкий, если это было в последний раз, когда вы выходили из режима вставки.:imap
что он будет работать даже в удаленном сеансе SSH или когда$DISPLAY
не установлено иное.Ответы:
В Vim есть что-то подобное в виде раскладок клавиш . От
:help mbyte-keymap
:Только в режиме вставки Caps Lock описывает такое отображение для эмуляции Caps Lock; Как вы можете видеть, файл сопоставлений аналогичен тому, что вы указали в своем вопросе.
Вы включаете этот параметр через
:set iminsert=1
или динамически черезi_CTRL-^
. Это также работает/search
с'imsearch'
опцией.источник
Ответ Инго Карката, похоже, был верным решением и решил мою ситуацию. Однако вот несколько более подробных инструкций для тех, кто только начинает работать с функциями языковой карты vim.
Во-первых, вам нужен файл языковой карты. Как и в примере с Caps Lock, вы захотите добавить что-то вроде следующего
~/.vim/keymap/dvorak2turkishf.vim
(скачайте мое полное отображение из Githu b):После этого остается настроить привязки, чтобы активировать его в некоторых случаях, но не в других. Вы хотите добавить что-то в свой
~/.vimrc
файл.Сначала свяжите таблицу поиска с входной:
Затем установите, какая раскладка будет использоваться для режима ввода на другом языке:
Отключите режим альтернативного ввода, чтобы по умолчанию не было никаких изменений:
Настройте автоматическую команду для запуска при выходе из режима вставки, чтобы отключить альтернативный языковой переключатель:
Добавьте привязки для всех различных способов, которыми вы можете оказаться в режиме ввода на другом языке, чтобы при использовании
<leader>
(Обычно\
) перед ними включалось переключение языковой карты перед переключением:Установите другой цвет курсора, когда карта включена:
Все вместе, вот что изменилось в моем конфиге . В заключение: если вы находитесь в режиме вставки, вы можете включать и выключать опцию языковой карты
<ctrl>+^
.источник