LINUX.ORG.RU

vim индикатор раскладки

 , ,


0

5

Всем привет. Хочу отображение индикатора раскладки в vim-airline, т.к. использую vim в терминале, развернутом на весь экран (на ноуте нет лишнего места на экране, экономлю на спичках), иногда переключаюсь на другой рабочий стол, поменяю там раскладку, вернусь в vim и начну печатать, замечу, что что-то не так только когда наберу несколько символов, что расстраивает меня. Вариант с индикацией раскладки лампочкой мне не подходит, т.к. на моей клаве на PC только одна лампочка (а vim у меня везде настроен одинаково, не хочу иметь разный vim на разных устройствах), для CapsLock и она мне важнее. Вариант с тем, чтобы запоминать раскладку для окна я тоже не люблю. Идеальным было бы отображение двух буковок ru или en. Как добиться желаемого? Ясно, что скорее всего придется велосипедить свой плагин (не хочу отнимать ещё одну строчку для другой «панели»), но что почитать про написание плагинов для vim и как получить информацию о текущей раскладке максимально независимо от способа её настройки (а в идеале и от ОС)?

★★★★★

ты погугли получше, я где-то такой велосипед видел. Просто он мне не нужен, ну и не сохранил.

для CapsLock

это не нужная кнопка и ненужный режим.

emulek
()
Ответ на: комментарий от emulek

для CapsLock
это не нужная кнопка

Кнопка нужная, на нее Escape вешать хорошо, мизинцем достается легко ☺. У меня на ноуте лампочка капса прямо на кнопке. Идиотское решение разработчиков, получается, что все равно я от себя индикатор рукой закрываю. Поэтому со времени приобретения ноута сделал нециклическую переключалку и не разу не пожалел, ни индикатор не нужен, да и вообще удобно.

liaonau
()

что почитать про написание плагинов

http://learnvimscriptthehardway.stevelosh.com

как получить информацию о текущей раскладке

Есть такой плугин: vim-xkbswitch, он автоматически переключает раскладку на английский при переходе в normal mode и обратно на раскладку, которая была в insert mode при выходе из него.

Можно взять этот плагин за базу (ну и использовать его самого, очень полезно), посмотреть как он там определяет текущую раскладку (это делает программа xkb-switch, которая у него в зависимостях), далее почитать в доке airline как добавить отображение информации из плагина (там очень просто), и всё.

Текущую раскладку можно получить просто:

~ $ xkb-switch
en
список всех раскладок:
~ $ xkb-switch -l
en
ru
Просто добавить выхлоп в панель airline.

vim
()
Ответ на: комментарий от dvrts

ну суть в том, что нажимаешь CTRL+LSHIFT и включается русский, а CTRL+RSHIFT — английский. Ну или другие сочетания, но сочетаний обязательно два(или больше).

Украинцы говорят, что это удобно, но я не украинец, мне двух языков хватает.

emulek
()
Ответ на: комментарий от vim

Есть такой плугин: vim-xkbswitch, он автоматически переключает раскладку на английский при переходе в normal mode и обратно на раскладку, которая была в insert mode при выходе из него.

не нужно, т.к. свежий VIM умеет русские команды, к примеру ролд вместо обычного hjkl.

emulek
()
Ответ на: комментарий от emulek

свежий VIM умеет русские команды

У меня самый свежий, еще горячий: 7.4.493

И он не понимает команды при русской раскладке в normal mode, я полагаю, что ты себе в ~/.vimrc настроил (что-то типа: set langmap=ФИСВУАПРШОЛДЬТЩЗЙ... ) когда-то и забыл, это не изкоробочная работа Vim;

не нужно

Не нужно только тем, кто кроме hjkl в normal mode ничего не использует, ведь как в таком случае использовать f , F , t , T , di" , ct$ и прочие конструкции - уму непостижимо.

vim
()
Ответ на: комментарий от emulek

Насколько свежий? У меня 7.4.430 не умеет. Умеет только при правильном keymap и переключении средствами вима, как и раньше.

anonymous
()
Ответ на: комментарий от emulek

Украинцы говорят, что это удобно, но я не украинец, мне двух языков хватает.

Украинцы используют, конкретно я:

en_uk = "setxkbmap -layout 'us,ua' -variant 'winkeys' -option 'grp:caps_toggle,grp_led:caps,compose:menu' &"
en_ru = "setxkbmap -layout 'us,ru' -variant 'winkeys' -option 'grp:caps_toggle,grp_led:caps,compose:menu' &"
и вешаешь их на хоткеи, мне удобно: mod4+F5 это английский+русский и mod4+F6 английский+украинский соответственно. (переключение капсом)

Удобно, ведь одновременно сразу три языка не используется, а одним хоткеем выбрать текущую пару - проще не бывает.

vim
()
Ответ на: комментарий от liaonau

Кнопка нужная, на нее Escape вешать хорошо, мизинцем достается легко.

Особенно тем, у кого на этот самом Caps'e висит раскладка, да. Если лень уж тянутся до Esc, то проще нажать Ctrl-C/Ctrl-[.

Ordy
()
Ответ на: комментарий от vim

что-то типа: set langmap=ФИСВУАПРШОЛДЬТЩЗЙ... ) когда-то и забыл

ну может и так, я уж и не помню. ЕМНИП там какая-то опция была, не langmap, а другая. Просто включить надо было.

Впрочем, может я и путаю. Лениво проверять.

Не нужно только тем, кто кроме hjkl в normal mode ничего не использует, ведь как в таком случае использовать f

ма<русская буква> работает также, как vf<нерусская буква>, я проверил.

Если у тебя включена русская раскладка, то зачем тебе поиск нерусских букв?

emulek
()

xxkb умеет рисовать иконку языка прямо на окне
https://screenshots.debian.net/thumbnail-with-version//xxkb/1.11-2.1
http://4.bp.blogspot.com/-8BMDrkWRpzk/TmHgb5V3clI/AAAAAAAAAuU/gK--iO3505w/s16...
http://parabrando.com/content/public/upload/xxkb_0_o.png
http://myria.math.aegean.gr/~atsol/newpage-en/software/cde/screenshots/xxkb.png

К сожалению работает это не на всех терминалах.
Я постарался пререпробовать всё что было в репах бубунты:
+ всякие терминалы типа xterm - без проблем.
+ gnome-terminal, roxterm, sakura, evilvte - без проблем
+ остальные типа xfce4-terminal (xfce), LXterminal, terminator - при попытке запустить xxkb выдают ошибку:

X Error of failed request:  BadMatch (invalid parameter attributes)
Major opcode of failed request: 62 (X_CopyArea)
...

и от этого от этого валится xxkb

Но в общем есть из чего выбрать, попробуй.

q11q11 ★★★★★
()
Последнее исправление: q11q11 (всего исправлений: 1)

на ноуте нет лишнего места на экране, экономлю на спичках

Если у вас всего две раскладки, то настройте на отображение текущей раскладки светодиод на клавиатуре (caps lock или scroll lock).

andreyu ★★★★★
()

вернусь в vim и начну печатать, замечу, что что-то не так только когда наберу несколько символов, что расстраивает меня

Тут поможет слепой метод набора текста.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Светодиод на капсе используется для самого капса, а других лампочек нет на клаве, т.к. я им пользуюсь, хоть и редко, но писать удерживая shift что-то вроде

#ifndef SOME_LONG_NAME_FILE_H_INCLUDED
нахожу несколько глупым.

peregrine ★★★★★
() автор топика
Ответ на: комментарий от andreyu

Так он и так слепой, вот только есть слова, начинающиеся на букву c... Да и при моей скорости набора я не всегда успеваю вовремя прекратить печать (пока прочитаю что написал, остановить палец, занесённый заранее над нужной клавишей уже можно и не успеть).

peregrine ★★★★★
() автор топика
Ответ на: комментарий от vim

Как сделаешь, выложи результат, пожалуйста, ибо времени очень мало, чтоб внятно разобраться в документации.

ЗЫ

После гугления задумался о проблеме - как узнать факт смены раскладки? Выходит надо обновлять периодически эту информацию, как, например тут. Но updatetime он же для всего вима работать будет (или только для плагина?), т.е. при большом количестве плагинов тормоза будут?

peregrine ★★★★★
() автор топика
Ответ на: комментарий от emulek

Украинцы говорят, что это удобно, но я не украинец, мне двух языков хватает.

гораздо удобнее -variant ',ruu' ведь отличия всего в паре букв, из можно удобно через l3 вводить. а в ruu еще много других вкусностей, например en-dash.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

Прикольно, спасибо, не слышал о такой.

vim
()
Ответ на: комментарий от vim

он автоматически переключает раскладку на английский при переходе в normal mode и обратно на раскладку, которая была в insert mode при выходе из него.

Не нужно.

ziemin ★★
()

иногда переключаюсь на другой рабочий стол, поменяю там раскладку, вернусь в vim и начну печатать

Я бы пофиксил эту проблему, kbdd, например, запоминает выбранную раскладку для окна.

Dantix ★★
()
Ответ на: комментарий от ziemin

А ты обоснуй.

Что обосновывать-то?

Попробуй поработать с html/xml и кириллицей, которой в веб-разработке тонны.

Поработаешь - поймешь, что нужно что-то решать с автоматическим переключением на английский язык в normal mode и возвратом кириллицы при переходе в insert mode.

Причем так, чтобы об этом даже не задумываться.

vim
()
Ответ на: комментарий от vim

Причем так, чтобы об этом даже не задумываться.

Я что, единственный человек на земле, у которого нет проблем с программами? Только я умею пользоваться гуглом?

Давай выкладывай, в чём проблема и почему ты ненавидишь вим.

ziemin ★★
()
Последнее исправление: ziemin (всего исправлений: 1)
Ответ на: комментарий от vim

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

funeralismatic ★★★
()
Ответ на: комментарий от funeralismatic

покажи полную реализацию

хочется не средствами осома

у меня средствами осома, я не в курсе как без на хоткеи вешать.

en_uk  = "setxkbmap -layout 'us,ua' -variant 'winkeys' -option 'grp:caps_toggle,grp_led:caps,compose:menu' &"
en_ru  = "setxkbmap -layout 'us,ru' -variant 'winkeys' -option 'grp:caps_toggle,grp_led:caps,compose:menu' &"

-- ...

awful.key({ modkey }, "F5", function () exec(en_uk) end),
awful.key({ modkey }, "F6", function () exec(en_ru) end),

-- ...

os.execute("setxkbmap -layout 'us,ua' -variant 'winkeys' -option 'grp:caps_toggle,grp_led:caps,compose:menu' &")
при старте осома по-дефолту работает пара 'us,ua', когда нужно 'us,ru' - жамк mod4+F6 и готов, вернуть 'us,ua' по mod4+F5

vim
()
Ответ на: комментарий от ziemin

Только я умею пользоваться гуглом?

Ты выпил, что-ли, и постишь на ЛОР? Не отписывай в таком состоянии.

почему ты ненавидишь вим.

Я не понял как относится к теме разговора ни одно предложение из твоего ответа.

Если у тебя есть лучше вариант для активной работы с кириллицей, чем xkb-switch + vim-xkbswitch, то предлагай.

vim
()
Ответ на: комментарий от peregrine

но писать удерживая shift что-то вроде

такое нужно реже, и вполне можно потерпеть, нажав shift+capslock. А в остальных случаях переключаться capslock'ом. Очень удобно, попробуй.

Deleted
()
Ответ на: комментарий от vim

Если у тебя есть лучше вариант для активной работы с кириллицей, чем xkb-switch + vim-xkbswitch, то предлагай.

Скрипт исправления раскладки в виме пишетсягуглится за 10 секунд.

ziemin ★★
()
Ответ на: комментарий от ziemin

Если он у тебя есть и работает, не мог бы ты поделиться, т.к. я еще не встречал работающие в виме (не гвиме).

vim
()
Ответ на: комментарий от Deleted

К сожалению, я работаю за ПК не только дома, и не везде мне разрешено переделывать настройки под себя, так что не хочу разрываться на 2 части с разными привычками. Т.к. в основном работаю с оффтопиком 8.1, где раскладка меняется по Win+пробел у меня и в Linux так же забиндено в дополнение к Alt+Shift.

peregrine ★★★★★
() автор топика
Ответ на: комментарий от vim

у меня сейчас так, но с naughty.notify(), а мне хотелось как-то из .xinitrc, например. xbindkeys жутко неудобен, и иногда отваливается, потому я подумал, что у тебя как-то иначе, чем у меня сейчас.

funeralismatic ★★★
()
Ответ на: комментарий от peregrine

К сожалению, я работаю за ПК не только дома, и не везде мне разрешено переделывать настройки под себя

ты работаешь на однопользовательских системах?

Deleted
()
Ответ на: комментарий от vim

Если у тебя есть лучше вариант для активной работы с кириллицей, чем xkb-switch + vim-xkbswitch, то предлагай.

Ты какие-то костыли городишь.

set keymap=russian-jcukenwin 
set iminsert=0

Теперь в insert-mode переключаешь раскладку по <C-^>, на normal mode она не влияет.

anonymous
()
Ответ на: комментарий от anonymous

Хотя ты же по-украински ещё что-то пишешь. Ну тогда страдай.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.