#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 " }}}
Комментариев нет:
Отправить комментарий