Ответ 1
Похоже, что кросс-платформенное решение не существует... Итак, в KDE я использую следующее:
function! SetUsLayout()
silent !qdbus org.kde.keyboard /Layouts setLayout us > /dev/null
endfunction
autocmd InsertLeave * call SetUsLayout()
Иногда я использую vim для написания текста, отличного от США, и когда я хочу использовать любую команду в обычном режиме, мне нужно изменить макет в США. Это можно сделать автоматически?
PS. Я могу сделать сопоставление, например this, но в этом случае команда выглядит так: вместо этого: w - не очень и опечатка.
Обновление
Я не хочу использовать параметр keymap, потому что предпочитаю языки переключателей CapsLock. Я пытаюсь написать autocmd для события InsertLeave, но не удалось...
Обновление 2
Возможно, кто-нибудь знает, почему следующее не работает?
function SetUsLayout()
!setxkbmap us,ru
endfunction
autocmd InsertLeave * call SetUsLayout()
Похоже, что кросс-платформенное решение не существует... Итак, в KDE я использую следующее:
function! SetUsLayout()
silent !qdbus org.kde.keyboard /Layouts setLayout us > /dev/null
endfunction
autocmd InsertLeave * call SetUsLayout()
:help langmap
скорее всего, предоставит всю необходимую вам информацию.
Для меня лучше использовать qdbus. Я создал простой, но хрупкий плагин, который отлично работает для меня: https://github.com/ironhouzi/bikey-vim/tree/master/plugin
Я называю это хрупким, так как он не обладает большой надежностью, если кто-то хочет его использовать.
Мне больше всего нравится английский, когда я использую Vim, за некоторыми исключениями. Когда я хочу писать на своем родном языке, я ударил "leader-k", и моя строка состояния авиакомпании покажет, что я переключил язык. Когда язык не является английским, script гарантирует, что каждый раз, когда я вхожу в режим вставки, мой родной язык устанавливается через qdbus. Каждый раз, когда я оставляю режим вставки, язык возвращается на английский. Он также поддерживает индивидуальные настройки между буферами. Даже если это может быть не лучший способ сделать что-то, я подумал, что поделюсь им, в случае, если кто-то может воспользоваться этим.
В 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