LINUX.ORG.RU

Менять раскладку при выходе из режима редактирования

 


0

4

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

Вот такой вариант не прокатывает:

function SetUsLayout()
  !setxkbmap us,ru
endfunction

autocmd InsertLeave * call SetUsLayout()

В качестве альтернативы можно использовать опцию keymap, но мне не хочется переключать раскладку способом, отличным от того, что настроен в системе: у меня стоит CapsLock, который в vim нельзя замапить на сочетание клавиш (по крайней мере я не нашел как).

★★

А вам для какой задачи? Если при ситуации с русским текстом, выходом в коммандный и работы, без переключения, как на меня легче поступить так: в vimrc:

set langmap=ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ;`qwertyuiop[]asdfghjkl\\;'zxcvbnm\\,.~QWERTYUIOP{}ASDFGHJKL:\\"ZXCVBNM<>

Spirit_of_Stallman ★★★
()

Вот такой вариант не прокатывает:

Идея хорошая, но она не решит проблему с управлением в режиме редактирования <c-o>

В качестве альтернативы можно использовать опцию keymap, но мне не хочется переключать раскладку способом, отличным от того, что настроен в системе: у меня стоит CapsLock,

У меня тоже capslock и мне не нравится хоткей c-^
А еще мне не нравится, что по умолчанию у меня включена русская раскладка. Не нашел, как это поправить.

который в vim нельзя замапить на сочетание клавиш (по крайней мере я не нашел как).

Тоже не нашел решения, как замапить это дело на capslock не трогая при этом системную раскладку.

Буду рад услышать любые идеи.

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

Вы правы в том, что я выбрал не совсем то слово. Но сам пользую именно этот метод, и всё устраивает. Может быть круг моих задач не затрагивает аспекты, где проявляются минусы этого способа.

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

langmap не распространяется на ввод команд, т.е. : введется нормально, а дальше уже все по-русски будет. Можно, конечно, изврат в виде плагина ruscmd использовать, но это выглядит нелогично, некрасиво и легко не заметить опечатку.

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

Ах! Тогда я не с той стороны посмотрел на задачу. В таком случае да - мой способ не при чём тут.

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

Идея хорошая, но она не решит проблему с управлением в режиме редактирования <c-o>

Она вообще не работает почему-то. Насчет <c-o>, вроде как должно работать: http://www.cs.csubak.edu/docs/vim/autocmd.html#InsertLeave

А еще мне не нравится, что по умолчанию у меня включена русская раскладка. Не нашел, как это поправить.

Где? В vim? А если vim -u NONE запустить, тоже русская будет? Локаль какая?

Тоже не нашел решения, как замапить это дело на capslock не трогая при этом системную раскладку.

Т.е. все-таки есть какой-то способ замапить? Но, скорее всего, CapsLock сначала обрабатывается системой, а потом уже передается в vim. Так что тут, наверно, тупик...

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

Она вообще не работает почему-то. Насчет <c-o>, вроде как должно работать: http://www.cs.csubak.edu/docs/vim/autocmd.html#InsertLeave

Спасибо, почитаю.

Где? В vim? А если vim -u NONE запустить, тоже русская будет? Локаль какая?

Вообще я не использую постоянно keymap, привык уже переключать раскладку. Тем более, что чаще использую только латинский набор.
Просто в свете соседнего срача, на тему «вышла новая версия emacs», снова включил keymap и столкнулся с этой проблемой.
Простой запуск vim из консоли, без имени файла, включает русскую раскладку (вижу это сразу, т.к. настроил отображение раскладки в статусе).
Локаль en_US.UTF-8.

«vim -u NONE» - это же без конфига. Естественно, что русской раскладки не будет. Да и откуда ей взяться?

Т.е. все-таки есть какой-то способ замапить?

Я не нашел такого способа. Можно тупо сделать ремап на другую комбинацию, но не на capslock. По идее, менеджер раскладок (использую kkbd) может при нажатии на capslock отправлять нужную комбинацию, если активное окно с vim. Но это костыль.

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

set iminsert=0 - не спасают?

Млин, спасло. А ведь я игрался сегодня с iminsert и imsearch. Походу сам себе палки в колеса засунул.
Значит поживет у меня еще какое то время keymap.

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

В общем, я, наверно, тоже пока с keymap попробую пожить:

set keymap=russian-jcukenwin
set iminsert=0
set imsearch=-1
set imcmdline

Но почему вариант с setxkbmap не работает?..

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

У меня работает так:

if has('unix')
  function SetUsLayout()
    silent !qdbus ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.set_layout 0 >/dev/null
  endfunction

  autocmd InsertLeave * call SetUsLayout()
endif

При этом корректно переключается светодиод, отображающий раскладку и сама раскладка. Использую в качестве переключалки kbdd.

И да, это не кроссплатформенно. Как это делать под mac os x и под windows не понятно.

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

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

За ваш вариант спасибо. Сделал себе для kde:

qdbus org.kde.keyboard /Layouts setLayout us > /dev/null

Будем считать, что решено.

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