Спрощуємо роботу з російськими текстами в Sublime Text 3 + Vintage

Якщо ви недавно почали: 1) користуватися Sublime Text і/або 2) користуватися плагіном Vintage і/або 3) редагувати багато тексту російською (або навпаки англійською) мовою з використанням ST3+Vintage, то швидше за все вже відчули яка біль пов'язана з командами призначеними на символи пунктуації — "$", ";", ".", ",", """ тощо
У невеликій замітці під катом я хочу запропонувати вам пару милиць, які допомагають цю біль в значній мірі полегшити.
Можливо ви не знали, що значною частиною плагіна Vintage є пачка біндінгів стандартних Vim-ових команд на їх реалізацію в плагіні, наприклад:
{ "keys": [";"], "command": "set_repeat_move_to_character_motion",
"context": [{"key": "setting.command_mode"}]
},

Так ось у означеної вище проблеми, корені лежать у тому, що даний биндинг не знає, чи була натиснута клавіша 4/$/; (і треба виконати "в кінець рядка"); /ж/: (і треба виконати "повторити пошук символу"). Тобто фактично биндинг не знає поточну розкладку. Якби плагіну можна було підказати поточну розкладку, то все б чудово.
І виявляється, що зробити цю підказку можливо — для цього у біндінгів є "context", який може дивитися в сеттинги:
{"key": "setting.is_rus"}

З допомогою цього трюку ми можемо змінити поведінку символу ";" на "в кінець рядка" тільки в тому випадку, якщо налаштування "is_rus" виставлена в true:
{ "keys": [";"], "command": "set_motion", "args": {
"motion": "vi_move_to_hard_eol",
"motion_args": {"repeat": 1, "extend": true},
"inclusive": true,
"clip_to_line": true },
"context": [{"key": "setting.command_mode"},{"key": "setting.is_rus"}]
}

На жаль, це рішення не ідеально — якщо ви редагуєте файл де приблизно рівну кількість тексту російською та англійською мовами, то один з мов у будь-якому випадку буде страждати. Більш того, якщо ви хоча б раз в півгодини переключаєтеся між файлами на різних мовах, то кожен раз лазити в налаштування теж не дуже зручно.
Звичайно, мені б хотілося показати вам ще пару рядків, які б автоматично дивилися на системну розкладку і проставляли б значення "is_rus". Але зараз я не знаю як це зробити — можливо пізніше я з цим розберуся і обов'язково поділюся результатами.
Але все-таки у мене є для вас другий костиль, який дозволяє і цю біль в значній мірі полегшити. Він базується на команді "toggle_setting", яка дозволяє переключити заданий булевий сеттінг, і яку ми повісимо на F8:
{ "keys": ["f8"], "command": "toggle_setting", "args": {"setting": "is_rus"} }

У підсумку пропонується приблизно наступний спосіб роботи: пишемо код, спотикаємося на одній з команд, матюгаемся, тиснемо F8, працюємо спокійно. Через півгодини починаємо писати статтю на хабр, спотикаємося на одній з команд, матюгаемся, тиснемо F8, дописуємо статтю спокійно.
В якості бази поділюся з вами биндингами, про які встиг спіткнуться після відкриття цього набору милиць:
{ "keys": ["\"", "<character>"], "command": "vi_replay_macro",
"context": [{"key": "setting.command_mode"},{"key": "setting.is_rus"}]
},
{ "keys": [";"], "command": "set_motion", "args": {
"motion": "vi_move_to_hard_eol",
"motion_args": {"repeat": 1, "extend": true},
"inclusive": true,
"clip_to_line": true },
"context": [{"key": "setting.command_mode"},{"key": "setting.is_rus"}]
},
{ "keys": ["."], "command": "show_panel", "args":
{
"panel": "incremental_find",
"select_text": false,
"reverse": false
},
"context": [{"key": "setting.command_mode"},{"key": "setting.is_rus"}]
}

Якщо хтось може запропонувати більш вдалий варіант вирішення цієї проблеми — розкажіть будь-ласка в коментах.
P. S.
Готовий конфіг з биндингами російських символів: https://github.com/cyberxndr/sublime-vintage-cyrillic/
Джерело: Хабрахабр

0 коментарів

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