Vim і перемикання розкладок: про наболіле

Всім привіт. Я досить давно користуюся редактором Vim для редагування дуже різних текстів: правки конфігів, написання коду, в якості зовнішнього редактора в браузері і поштовому клієнті…

Редактор майже ідеальний, але було одне маленьке «але». Зокрема, бісило перемикання розкладки. Нещодавно в особистій бесіді зайшла мова про що лежать на шляху використання Vim граблях, і я вирішив накидати такі собі «нотатки на полях».


Здавалося б, ну що там такого: натиснув поєднання, вводиш латиницю, натиснув ще раз — кирилицю. Однак, в нормальному режимі, перебування в якому займає як мінімум 80% часу, накладаються свої відбитки. Гаразд, про langmap, думаю, знають всі.

Прописуємо в ~/.vimrc наступне:

set langmap=ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ;ABCDEFGHIJKLMNOPQRSTUVWXYZ,фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz

І можемо виконувати команди в нормальному режимі з кириличної розкладки. Правда, для введення команд через <:> як і раніше потрібно переключити розкладку, що бісило.

Тоді я згадав, що редактор має власну переключалку.

set keymap=russian-jcukenwin

Більш детально прийом описувався, наприклад, тут.

Начебто б, проблема вирішена: розкладка перемикається тільки в режимі вставки, а команди вводяться латиницею. Але знову проблема: вбудована перемикач ну дуже сильно конфліктує з іксовій. Та й дефолтний поєднання <C-^> не особливо ергономічно.

Відключати иксовую і повністю покладатися на Vim? В принципі, на це можна було піти, але дуже не хотілося. Викликати редактор, для набору кириличних назв в терміналі здалося мені деяким перебором. Якийсь час користувався, плутався і матюкався.

Так справа не піде, знову в гугл. Знайшов цікаву статті Храброва Дмитра DeXPeriX про написаному ним і Олексієм Радковым плагіні vim-xkbswitch.

Коротенько, плагін робить наступне: при переході в нормальний режим, перемикає загальносистемну розкладку (через xkb-switch, який повинен бути встановлений у системі) на латиницю, запам'ятавши поточну розкладку, а при переході в режим вставки, перемикає на запомненную. Сказати, що я був радий — не сказати нічого. Величезна подяка авторам за те, чого так не вистачало всі ці роки.

Однак, в процесі експлуатації, зіткнувся-таки з деякими труднощами. Зайшов якось на свій комп'ютер по ssh:

$vim file.txt
Vim: Caught deadly signal SEGV
Vim: Finished.
zsh: segmentation fault vim file.txt

Відразу на плагін не подумав, були думки про посыпавшемся жорсткому диску, сбойнувшей файловій системі і тому подібних «приємні» речі… В загальному, xkb-switch при невстановленій змінної DISPLAY випадає в segfault, а слідом за ним і плагін, несучи за собою і vim.

В якості рішення, можна перевірити задана мінлива і, тільки в разі успіху, активувати плагін. Виглядає це приблизно так:

if $DISPLAY == "" 
let g:XkbSwitchEnabled = 0
else
let g:XkbSwitchEnabled = 1
let g:XkbSwitchLib = '~/.local/lib/libxkbswitch.so'
let g:XkbSwitchIMappings = ['uk']
endif 

Після цього вильоти припинилися. Якщо хочеться мати функціонал плагіна при редагуванні по ssh, то потрібно підключатися з підтримкою X-forwarding'a, з ключами -X або Y.

Сподіваюся, ця стаття допоможе зберегти трохи нервових клітин.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.