Comments 17
Надеюсь, это решит данную, довольно старую проблему. :)
Как раз сегодня писал нечто похожее. Жаль, вы просто захардкодили значения клавиш — не будет работать для других раскладок.
В GTK для кнопок есть понятия keyval и hardware_keycode. Значение keyval разное для «f» и «а», например; hardware_keycode же не меняется при переключении раскладок. Возможно, нечто похожее есть и для XKB?
В GTK для кнопок есть понятия keyval и hardware_keycode. Значение keyval разное для «f» и «а», например; hardware_keycode же не меняется при переключении раскладок. Возможно, нечто похожее есть и для XKB?
Захардкодили значения раскладки по умолчанию. Плагин поддерживает загрузку чармапов из файла — введите один раз свою и всё будет прекрасно работать!
Дополнение от Алексея:
Название 'ru' в g:XkbSwitchImappings = ['ru'] очень условно — в принципе оно может быть названо 'blahblah' или как угодно — важно что мы его используем и что во что оно переводит. Это означает что для одного языка можно настроить сразу много вариантов раскладки. Еще это означает, что этот механизм можно использовать вообще для любых транслейшнов инсерт маппингов, не обязательно связанных с задачей русификации/германизации и т.п., а вообще для каких-то своих произвольных целей.
Hardware-code — это очень сильный механизм, с его помощью можно в принципе настроить клавиши для любых режимов — в т.ч. для нормального и т.п., но в vime почему-то этого не сделали, наверное есть на то причина.
Плюс получится тот же самый бездумный автоматизм, который добавит проблемы, вроде той, которую я описал для немецкой раскладки (там "=" заменено на "+" и из-за этого не хочет работать )
Так что я за хардкод плюс пользовательские настройки через файл или vimrc :)
К тому же vim в маппингах исходно манипулирует понятием символов, а не hardware кейкодов. Это опять связано с той же самой проблемой всеобщей глобальной локализацией, с помощью которой они бы могли и команды в нормальном режиме локализовать, но не сделали этого.
Название 'ru' в g:XkbSwitchImappings = ['ru'] очень условно — в принципе оно может быть названо 'blahblah' или как угодно — важно что мы его используем и что во что оно переводит. Это означает что для одного языка можно настроить сразу много вариантов раскладки. Еще это означает, что этот механизм можно использовать вообще для любых транслейшнов инсерт маппингов, не обязательно связанных с задачей русификации/германизации и т.п., а вообще для каких-то своих произвольных целей.
Hardware-code — это очень сильный механизм, с его помощью можно в принципе настроить клавиши для любых режимов — в т.ч. для нормального и т.п., но в vime почему-то этого не сделали, наверное есть на то причина.
Плюс получится тот же самый бездумный автоматизм, который добавит проблемы, вроде той, которую я описал для немецкой раскладки (там "=" заменено на "+" и из-за этого не хочет работать )
Так что я за хардкод плюс пользовательские настройки через файл или vimrc :)
К тому же vim в маппингах исходно манипулирует понятием символов, а не hardware кейкодов. Это опять связано с той же самой проблемой всеобщей глобальной локализацией, с помощью которой они бы могли и команды в нормальном режиме локализовать, но не сделали этого.
спасибо большое, очень не хватало
Я для себя проблему с русским языком в vim частично решил так:
На 90% лично мне этого хватает.
upd. Хабр некорректно распарсил, тут вот нормально
set langmap=ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ;`qwertyuiop[]asdfghjkl\\;'zxcvbnm\\,.~QWERTYUIOP{}ASDFGHJKL:\\"ZXCVBNM<>
nmap Ж :
" yank
nmap Н Y
nmap з p
nmap ф a
nmap щ o
nmap г u
nmap З P
На 90% лично мне этого хватает.
upd. Хабр некорректно распарсил, тут вот нормально
А мне больше нравится «нативный» вариант — выставить
и использовать
Мечта только одна — выставить то же сочетание клавиш в X-ах, и научить xkb не переключаться, когда активно окно Vim'а, а передавать сигнал ему. Если кто знает как это сделать «малой кровью», буду очень благодарен.
set keymap=russian-jcukenwin
и использовать
i_CTRL-^
для переключения раскладки.Мечта только одна — выставить то же сочетание клавиш в X-ах, и научить xkb не переключаться, когда активно окно Vim'а, а передавать сигнал ему. Если кто знает как это сделать «малой кровью», буду очень благодарен.
Если есть желание получить работающий плагин под другую ОС (например, под Mac OS), то нужно сделать Vim-совместимую библиотеку. У кого есть желание и возможность — пишите в личку.Есть вот такой плагин для OS X KeyboardLayoutSwitcher. Надо бы обобщить с вашим, какой интерфейс должна предоставлять библиотека переключения языка (тыкните носом, если где-то уже описано)?
По большому счёту нужны всего 2 функции: 1) Которая возвращает раскладку окна вима (или текущего окна) 2) Которая умеет для этого окна раскладку устанавливать. Обе функции принимают и возвращают один аргумент (можно либо строки, либо int'ы). Пример XKbSwitchApi.cpp, смотрите секцию 'extern «C»'.
ArchLinux, VIM.
Выставил:
Перезапускаю VIM.
1) Вхожу в режим редактирования,
2) Включаю русский
3) Выхожу из режима редактирования не переключая языка
Пытаюсь сделать хоть что-то `dd` не пашет, двоеточие не пашет. Но при этом в режиме вставки работают горячие клавиши. Например, ctrl+t, что в русской, что в английской раскладке сдвигает текст.
Выставил:
let g:XkbSwitchEnabled = 1
let g:XkbSwitchLib = '/usr/lib/libxkbswitch.so'
let g:XkbSwitchIMappings = ['ru']
$ xkb-switch -l
us
ru
Перезапускаю VIM.
1) Вхожу в режим редактирования,
2) Включаю русский
3) Выхожу из режима редактирования не переключая языка
Пытаюсь сделать хоть что-то `dd` не пашет, двоеточие не пашет. Но при этом в режиме вставки работают горячие клавиши. Например, ctrl+t, что в русской, что в английской раскладке сдвигает текст.
Создал задачу на гитхабе: github.com/lyokha/vim-xkbswitch/issues/1
<C-t> в разных раскладках — это собственная возможность X’ов (при условии, что X’ам сообщили о нескольких раскладках; с некоторыми переключалками может не работать).
Установил под MacVim
let g:XkbSwitchEnabled = 1
let g:XkbSwitchLib = '/usr/local/lib/libInputSourceSwitcher.dylib'
Переключение срабатывает в графическом MacVim, но не работает в терминальной версии. Пробовал в iTerm2 и в стандартном терминале.
MacVim устанавливал через Homebrew с ключем --override-system-vim
Подскажите, у кого срабатывает переключение в терминальном vim, какие у вас настройки?
let g:XkbSwitchEnabled = 1
let g:XkbSwitchLib = '/usr/local/lib/libInputSourceSwitcher.dylib'
Переключение срабатывает в графическом MacVim, но не работает в терминальной версии. Пробовал в iTerm2 и в стандартном терминале.
MacVim устанавливал через Homebrew с ключем --override-system-vim
Подскажите, у кого срабатывает переключение в терминальном vim, какие у вас настройки?
Sign up to leave a comment.
Vim и переключение раскладки клавиатуры