Привет.
Использую вим давно, но больше для редактирования конфигов, поэтому в таком легком режиме. В последнее время возникло желание углубиться и писать в нем и обычные тексты, в т.ч. на русском языке. Ну и столкнулся я с извечной линуксовой проблемой – переключалкой :) Насколько я понял существует несколько методов решения разной степени кривости:
- langmap;
- встроенная переключалка, отличная от системной Ctrl-^ ;
- vim-xkbswitch.
Может что-то еще. langmap у меня работал не для всех символов; встроенная переключалка неудобна; vim-xkbswitch в принципе работал как надо, но почему-то сыпал ошибками, если открыть пустой вим. После чего, впрочем, работал нормально.
Я думаю многим приходила такая идея в голову, но почему-то в статьях по настройке переключалки это нигде не встречается: просто запоминать раскладку в Insert, переключать на английскую, если выходим с Insert и возвращать назад если входим в Insert снова. Некоторое время изучение ужасного vimscript и вот что у меня появилось в конфиге (в vimscript вообще не разбираюсь, если что не так скажите):
let g:imodeKeyboardLayout = 0
function KLInsertLeave()
let g:imodeKeyboardLayout = system('xkblayout-state print "%c"')
call system('xkblayout-state set 0')
call system('pkill -SIGRTMIN+11 i3blocks') "нужен только для i3blocks, можно не писать
endfunction
function KLInsertEnter()
if g:imodeKeyboardLayout == 0
call system('xkblayout-state set 0')
elseif g:imodeKeyboardLayout == 1
call system('xkblayout-state set 1')
endif
" еще один elseif, если раскладок больше двух
call system('pkill -SIGRTMIN+11 i3blocks')
endfunction
autocmd! InsertLeave * call KLInsertLeave()
autocmd! InsertEnter * call KLInsertEnter()
Невероятно просто, гибко.. я не пойму в чем проблема? Вроде все работает. Почему подобное не рекомендуют во всех рецептах?