Как автоматически изменить раскладку клавиатуры при переключении на обычный режим vim?

Иногда я использую vim для написания текста, отличного от США, и когда я хочу использовать любую команду в обычном режиме, мне нужно изменить макет в США. Это можно сделать автоматически?

PS. Я могу сделать сопоставление, например this, но в этом случае команда выглядит так: вместо этого: w - не очень и опечатка.

Обновление

Я не хочу использовать параметр keymap, потому что предпочитаю языки переключателей CapsLock. Я пытаюсь написать autocmd для события InsertLeave, но не удалось...

Обновление 2

Возможно, кто-нибудь знает, почему следующее не работает?

function SetUsLayout()
  !setxkbmap us,ru
endfunction

autocmd InsertLeave * call SetUsLayout()

Ответ 1

Похоже, что кросс-платформенное решение не существует... Итак, в KDE я использую следующее:

function! SetUsLayout()
  silent !qdbus org.kde.keyboard /Layouts setLayout us > /dev/null
endfunction

autocmd InsertLeave * call SetUsLayout()

Ответ 2

:help langmap

скорее всего, предоставит всю необходимую вам информацию.

Ответ 3

Для меня лучше использовать qdbus. Я создал простой, но хрупкий плагин, который отлично работает для меня: https://github.com/ironhouzi/bikey-vim/tree/master/plugin

Я называю это хрупким, так как он не обладает большой надежностью, если кто-то хочет его использовать.

Мне больше всего нравится английский, когда я использую Vim, за некоторыми исключениями. Когда я хочу писать на своем родном языке, я ударил "leader-k", и моя строка состояния авиакомпании покажет, что я переключил язык. Когда язык не является английским, script гарантирует, что каждый раз, когда я вхожу в режим вставки, мой родной язык устанавливается через qdbus. Каждый раз, когда я оставляю режим вставки, язык возвращается на английский. Он также поддерживает индивидуальные настройки между буферами. Даже если это может быть не лучший способ сделать что-то, я подумал, что поделюсь им, в случае, если кто-то может воспользоваться этим.

Ответ 4

В Ubuntu я использую следующее:

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()

или короче

silent !gsettings set org.gnome.desktop.input-sources current 0