LINUX.ORG.RU
ФорумTalks

Я подебил?

 ,


5

3

Привет.

Использую вим давно, но больше для редактирования конфигов, поэтому в таком легком режиме. В последнее время возникло желание углубиться и писать в нем и обычные тексты, в т.ч. на русском языке. Ну и столкнулся я с извечной линуксовой проблемой – переключалкой :) Насколько я понял существует несколько методов решения разной степени кривости:

  1. langmap;
  2. встроенная переключалка, отличная от системной Ctrl-^ ;
  3. vim-xkbswitch.

Может что-то еще. langmap у меня работал не для всех символов; встроенная переключалка неудобна; vim-xkbswitch в принципе работал как надо, но почему-то сыпал ошибками, если открыть пустой вим. После чего, впрочем, работал нормально.

Я думаю многим приходила такая идея в голову, но почему-то в статьях по настройке переключалки это нигде не встречается: просто запоминать раскладку в Insert, переключать на английскую, если выходим с Insert и возвращать назад если входим в Insert снова. Некоторое время изучение ужасного vimscript и вот что у меня появилось в конфиге (в vimscript вообще не разбираюсь, если что не так скажите):

let g:imodeKeyboardLayout = 0

function KLInsertLeave()
    let g:imodeKeyboardLayout = system('xkblayout-state print "%c"')
    call system('xkblayout-state set 0')
    call system('pkill -SIGRTMIN+11 i3blocks') "нужен только для i3blocks, можно не писать
endfunction

function KLInsertEnter()
    if g:imodeKeyboardLayout == 0
        call system('xkblayout-state set 0')
    elseif g:imodeKeyboardLayout == 1
        call system('xkblayout-state set 1')
    endif 
    " еще один elseif, если раскладок больше двух
    call system('pkill -SIGRTMIN+11 i3blocks')
endfunction

autocmd! InsertLeave * call KLInsertLeave()
autocmd! InsertEnter * call KLInsertEnter()

Невероятно просто, гибко.. я не пойму в чем проблема? Вроде все работает. Почему подобное не рекомендуют во всех рецептах?

★★★★★

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

Это круто до тех пор пока не надоедает прокидывать далеко и глубоко. Я как то свыкся с ручным переключением раскладки + langmap. Но вообще это конечно такой себе юзабилити…

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

Но вообще это конечно такой себе юзабилити…

А в чем проблема? При переключении в Normal раскладка автоматически переключается на английский. При возвращении в Insert автоматически возвращается в ru или en, в зависимости от того, какой была.

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

Это круто пока на локалхосте, или в одном хопе от него. А потом поддерживать это может оказаться не так тривиально. Например в контейнере в vagrant’e на удалённом хосте, уже всё будет слегка не тривиально.

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

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

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

Например в контейнере в vagrant’e на удалённом хосте, уже всё будет слегка не тривиально.

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

Но, в принципе, это тоже не такая уж большая проблема. Просто вместо «xkblayout-state set» нужно добавить переключалку, которую поддерживает удаленный хост.

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

Спорить тут сложно, это скорее мои извращения. Художку я не пишу, а вот доку пишу частенько на русском, а она всегда где то рядом с кодом.

pon4ik ★★★★★
()

Ну и столкнулся я с извечной линуксовой проблемой – переключалкой

Это проблема не линя, а недо-VM.

RazrFalcon ★★★★★
()

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

Deleted
()

Хз как у тебя но у меня комбинация ctrl-alt-esc-shift+:w-ctrl-alt нажимается со скоростью света :D и не вызывает проблем, а вот копипаста из вне shift-"+y shift-"+p оййй сучка как бееесиииит прям не могу, аж болит всё. Даже в последнее время set guioptions+=m и тыкаю мышкой :D

LINUX-ORG-RU ★★★★★
()

Прочитал как я, подебил, извиняюсь….

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

Баш-то тут каким боком?

В строке let g:imodeKeyboardLayout = system('xkblayout-state print "%c"') происходит попытка узнать раскладку путем вызова внешней команды. Если этой команды нет, то и раскладку не узнаешь хоть на баше, хоть на вимскрипте.

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

В строке let g:imodeKeyboardLayout = system(‘xkblayout-state print «%c»’) происходит попытка узнать раскладку путем вызова внешней команды. Если этой команды нет, то и раскладку не узнаешь хоть на баше, хоть на вимскрипте.

Капитан, корабль готов к отплытию!

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

Капитан, корабль готов к отплытию!

Отдать швартовы!

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