Как избежать постоянного переключения на английскую раскладку клавиатуры и обратно для ввода команд Vim при написании на нелатинском языке (например, на греческом)?

Я даю Vim серьезную попытку кодирования моих приложений Python. Тем не менее, Vim оказался настолько гибким, что я думал использовать его в качестве основного редактора на работе для написания юридических/юридических документов. Проблема в том, что мой родной язык не английский, а греческий. Итак, я сопоставил Alt+Shift для переключения между английской и греческой раскладками клавиатуры.

Проблема, с которой я сталкиваюсь, заключается в том, что мне приходится нажимать Alt+Shift каждый раз, когда я хочу ввести команду Vim (чтобы вернуться к английскому языку). Таким образом, это Alt+Shift, когда я печатаю свой документ, затем снова Alt+Shift для ввода команд Vim. Это противоречит цели использования Vim, по крайней мере, с точки зрения скорости использования.

Итак, мой вопрос прост: есть ли способ избежать этих частых изменений раскладки клавиатуры Alt+Shift только для ввода команд Vim при написании на нелатинском языке (например, греч.)?


person Kilon    schedule 23.09.2010    source источник


Ответы (1)


Эту проблему можно решить с помощью опции keymap. Это позволяет определить альтернативную раскладку клавиатуры для использования в режимах, требующих ввода текста.

Для переключения между раскладкой по умолчанию и альтернативной раскладкой в ​​режиме вставки, замены или командной строки (но не в обычном режиме) используйте Ctrl+^ (Ctrl< /kbd>+6). Изменение раскладки влияет только на ввод текста; поведение клавиатуры в обычном режиме остается неизменным независимо от текущей настройки раскладки. Можно оставить запись в режиме вставки на греческом языке и сразу же использовать сочетания клавиш в обычном режиме, не переключаясь на другую раскладку клавиатуры. Если затем вернуться в режим вставки или, например, начать поиск, набрав /, Vim автоматически переключит раскладку обратно на греческий.

Текущая раскладка клавиатуры, используемая в этих режимах ввода текста, запоминается между переключениями в другие режимы. Единственное исключение из этого поведения сделано для режима командной строки, который всегда начинается с раскладки клавиатуры по умолчанию, поскольку большую часть времени требуется ввести команду Ex (в ASCII). С установленным параметром keymap пользователь должен работать в Vim, сохраняя английскую раскладку системной клавиатуры при переключении раскладки клавиатуры Vim с помощью Ctrl+^ (вместо общесистемной раскладки выключатель).

Чтобы включить, скажем, греческую раскладку UTF-8 на постоянной основе, добавьте следующую строку в файл .vimrc.

:set keymap=greek_utf-8

Существует множество предопределенных раскладок для большого набора языков, вы можете просмотреть их все в самом Vim, используя :e $VIMRUNTIME/keymap. Обратите внимание, что обычно для одного языка предоставляется несколько раскладок, которые отличаются только кодировкой символов, так что каждый может выбрать ту, которая подходит для его конфигурации.

Я также рекомендую установить параметры ниже, чтобы указать, должна ли раскладка клавиатуры быть включена по умолчанию в режиме вставки и при вводе шаблона поиска:

:set iminsert=0 imsearch=-1

Подробное объяснение см. в :help iminsert и :help imsearch.

Также есть специальный языковой режим, который, если не ошибаюсь, был введен в Vim раньше, чем keymap. Это позволяет добиться поведения, аналогичного keymap, путем ручного указания пар букв, соответствующих клавишам на клавиатуре, в длинной строке, которая будет сохранена в опции langmap. Лично я — мой родной язык тоже не английский — я предпочитаю (и рекомендую) вместо этого использовать способ keymap.

В заключение я должен подчеркнуть, что все вышеперечисленное в равной степени применимо к любому другому языку, для которого Vim имеет (или может иметь) раскладку клавиатуры.

См. также мой ответ на аналогичный вопрос 'Vim «раздражает» раскладками клавиатуры», который был задан с тех пор, как я первоначально дал этот ответ.

person ib.    schedule 23.09.2010
comment
Ты великолепен!!! Ваше предложение не сработало, но вы указали мне правильное направление. Все, что мне нужно было сделать, это изменить set keymap=greek_utf-8 на set keymap = greek_iso-8859-7 . По какой-то странной причине греческий utf отображает странные символы, то же самое происходит с моим firefox, когда он выбирает utf, но там также работает iso. Все остальное работало как шарм. Я просто нажимаю ctrl + ^ в режиме редактирования, как вы предложили, и я могу переключаться между греческим и английским языками, в то время как командный интерфейс остается на английском языке. Вы спаситель жизни, спасибо. - person Kilon; 23.09.2010
comment
Можно ли использовать что-то еще, кроме ctrl+^. Сложно нажать Ctrl+Shift+6. - person Sergey; 03.08.2011
comment
@Сергей: Ctrl+6 тоже работает. Если вам по-прежнему неудобно печатать, создайте простое в использовании сопоставление. Например, чтобы переназначить его на Ctrl+L, используйте inoremap <c-l> <c-^>. - person ib.; 04.08.2011
comment
Ctrl + ^ просто открывает для меня новый файл в буфере; не переключает языки. - person dionyziz; 14.02.2012
comment
@dionyziz: Это потому, что Ctrl+^ переключается на альтернативный буфер в обычном режиме; в то время как в режимах вставки и командной строки он переключает сопоставления языков. Сравните :help ^^ с :help i_^^ и :help c_^^. - person ib.; 15.02.2012
comment
@Kilon, возможно, ваш терминальный шрифт не поддерживает UTF-8? - person Keith Pinson; 20.01.2014
comment
@ib Спасибо за inoremap <c-l> <c-^>! Искал как переназначить это. Сопоставление с <F3> работает лучше всего. - person Artyom; 17.07.2019