Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

Vim в командный режим всегда с английской раскладкой клавиатуры

#ubuntu #vim


Система Ubuntu 14.04, Vim 7.4.52.
При редактировании не англоязычных текстов приходится работать с разными раскладками
клавиатуры. Например, в системе установлены английская, русская, украинская раскладки.
В Vim редактирование происходит в командном режиме, который включается клавишей ESC.
Нюанс в том, что если редактировать текст кириллицей (включена русская или украинская,
e.t.c. раскладка), то перейдя в командный режим по клавише ESC и не меняя раскладку
на английскую - ни одна команда не срабатывает.
Расскладку в системе меняю по CapsLock и хотелось бы этот хоткей не менять.
Гугление дало несколько вариантов решения, в частности назначение другого хоткея
(Ctrl+^) внутри самого Vim не меняя системную раскладку. Как вариант можно пользоваться,
но хотелось бы более "универсальное" решение, например при нажатии ESC запоминать текущую
раскладку в режиме вставки и автоматически переключать раскладку на английский. После
выполнения команд и возвращения в режим вставки - возвращать сохраненную раскладку.
Вопрос: можно ли сделать чтобы Vim переключал автоматически раскладку на английскую
при переходе в командный режим?
    


Ответы

Ответ 1



Решил частично задачу через d-bus function! SetUsLayout() silent !qdbus org.gnome.SettingsDaemon.Keyboard /org/gnome/SettingsDaemon/Keyboard org.gnome.SettingsDaemon.Keyboard.SetInputSource 0 > /dev/null endfunction autocmd InsertLeave * call SetUsLayout() теперь по нажатию ESC и переходе в командный режим клавиатурная раскладка переключается на английскую. Можно даже команду в функции SetUsLayout записать короче: silent !gsettings set org.gnome.desktop.input-sources current 0 Осталось решить вопрос с запоминанием той раскладки с которой выходили из режима вставки и установки ее, при возврате в режим вставки.

Ответ 2



Есть решение, не уверен, удовлетворит ли оно вас полностью, наоборот привязать команды в том числе на русские символы. Попробуйте поместить в .vimrc следующую строку " Русская раскладка set langmap=ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ;`qwertyuiop[]asdfghjkl\\;'zxcvbnm\\,.~QWERTYUIOP{}ASDFGHJKL:\\"ZXCVBNM<>

Ответ 3



Используй Vim'овскую раскладку. У меня переключение по w function! EnRuHighlight() if &iminsert == 0 execute "AirlineTheme light" set iminsert=1 else execute "AirlineTheme lucius" set iminsert=0 endif endfunction " Настраиваем переключение раскладок клавиатуры по set keymap=russian-jcukenwin " Раскладка по умолчанию - английская set iminsert=0 " аналогично для строки поиска и ввода команд set imsearch=0 " {{{ swith language En-Ru nmap w :call EnRuHighlight() imap w :call EnRuHighlight()a " }}}

Комментариев нет:

Отправить комментарий