2013-07-28 5 views
5

Есть ли способ сделать IdeaVim понятным для русского языка в режимах, отличных от Input? В моей .vimrc меняIdeaVim и русский макет

set keymap=russian-jcukenwin 

так что я могу переключить язык в VIM, нажав Ctrl +^и относительно доволен. Но, похоже, IdeaVim не читает и не понимает эту настройку. Это может быть очень неприятно, чтобы перестать набирать что-либо (например, комментарий) по-русски, переключиться в режим команд и застрять. Есть ли обходной путь?

ответ

0

Привіт! Короткий ответ - нет, нет обходного пути. Если вы не захотите изменить IdeaVim.

При нажатии клавиши можно получить различную информацию о событии. Для нашего случая наиболее интересными являются hardware key code и key value. Первый идентичен для s, ы и і, которые расположены на том же ключе; последний отличается от макета к макету. Поскольку IdeaVim uses key values для привязок (а в действиях настроек также привязаны к значениям ключа), невозможно задействовать действия при использовании макета, где значение ключа отличается. Как следствие, он будет хорошо работать в немецком макете, например.

Я бы порекомендовал вам не писать комментарии на русском языке в любом случае.

5

Сначала я попытался использовать langmap, как в этом gist, но IdeaVim не поддерживает langmap.

Далее я попытался использовать map, так что я сделал это решение:

let rumap = 'йцукенгшщзхъфывапролджэёячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ' 
let enmap = 'qwertyuiop[]asdfghjkl;''\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>' 
let mapLen = strchars(rumap) 
let i = 0 
while i < mapLen 
    let ruChar = matchstr(rumap, ".", byteidx(rumap, i)) 
    let enChar = enmap[i] 
    "echo 'map '.ruChar.' '.enChar 
    execute 'map '.ruChar.' '.enChar 
    execute 'cmap '.ruChar.' '.enChar 
    let i += 1 
endwhile 

map Ё \| 
cmap Ё \| 

Вы можете настроить его для раскладки клавиатуры.

Но я забыл, что IdeaVim не поддерживает vimscript и cmap и я добавил echo 'map '.ruChar.' '.enChar (комментируемую строки), прилагаемый код сверху .vimrc и открыл Vim из командной строки, так что напечатанный мне все map команд. Я добавил их к .ideavimrc и приложенному картированию трубы (|) характер:

map й q 
map ц w 
map у e 
map к r 
map е t 
map н y 
map г u 
map ш i 
map щ o 
map з p 
map х [ 
map ъ ] 
map ф a 
map ы s 
map в d 
map а f 
map п g 
map р h 
map о j 
map л k 
map д l 
map ж ; 
map э ' 
map ё \ 
map я z 
map ч x 
map с c 
map м v 
map и b 
map т n 
map ь m 
map б , 
map ю . 
map Й Q 
map Ц W 
map У E 
map К R 
map Е T 
map Н Y 
map Г U 
map Ш I 
map Щ O 
map З P 
map Х { 
map Ъ } 
map Ф A 
map Ы S 
map В D 
map А F 
map П G 
map Р H 
map О J 
map Л K 
map Д L 
map Ж : 
map Э " 
map Я Z 
map Ч X 
map С C 
map М V 
map И B 
map Т N 
map Ь M 
map Б < 
map Ю > 
map Ё /| 

Теперь у меня есть IdeaVim работать с кириллицей макетом в нормальном, наглядных + выбрать и операторные в ожидании режимов.

+0

Спасибо, это работает для меня! Ну, почти. Я понял, что комбинации типа 'ciw' или' daw' все еще не работают. Похоже, что 'i' и' a' обрабатываются неправильно, когда используются как «внутри» и «вокруг». Любые идеи, как это можно исправить? –

+0

Эти комбинации не работают для меня тоже :(Я еще не нашел решение. Если вы затем разместите его здесь. – mixel

+0

Спасибо большое! Я добавил, что кодировка должна быть ANSI – zhekaus