LINUX.ORG.RU

vim: как быть с командой r


0

0

Я пытаюсь разобраться с переключением раскладок в vim. Написал небольшой скрипт, который переключает раскладку перед InsertEnter и возвращает её обратно перед InsertLeave.

Однако возникла проблема: команда r (Normal mode) работает почти как insert. Перед её выполнением и после него тоже неплохо бы менять раскладку.

Не понимаю, как это можно сделать.

Пробовал что-то вроде:

:noremap r :call LoadLayout()r:call SaveLayout()

Но, разумеется, просто происходит замена символа на ":".

Как я понимаю, есть два варианта: можно научиться вызывать "r" между двумя командами (не понимаю как, :normal не подходит, т.к. блокирует всё, что идёт после текста команд), а можно повторить работу r, но это тоже не просто, потому что getchar() и :startinsert ведут себя несколько иначе, чем r.

★★★★

О чём речь? О переключении языков?
Чем не устраивает стандартный способ?

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

Стандартный способ - это C-^?

Неудобно, привык переключаться по CapsLock.

Хочу, чтобы при выходе из режима Insert, vim сам переключался на английский (и запоминал текущую), а при входе - загружал запомненную.

Уже всё работает, кроме команды r, насколько я понимаю.

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

У меня за переключение отвечает клавиша win, и команды на русском тоже воспринимаются (langmap), поэтому надобность в английском отпадает. Исключение составляют команды с двоеточием, их нужно набирать на английском!

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

langmap поставил (пришлось компилировать с патчем, т.к. с utf8 у langmap проблемы).

Но раздражает именно необходимость переключать раскладки перед вводом :команд.

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

В любом случае, хотелось бы узнать, как можно победить команду r.

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

> Но раздражает именно необходимость переключать раскладки перед вводом :команд.

set iminsert=0

set imsearch=0

По умолчанию делает дефолтным english в обоих режимах. Дальше как запомнит.

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

Спасибо. Это для :set keymap=russian-jcukenwin ?

Всё-таки неудобно по C-^. :(

Кстати, как у такого решения с командой r?

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

> Кстати, как у такого решения с командой r?

Работает нормально. Тоесть если ты набирал в режиме вставки на инглише - на инглиш и будет заменять. Если на русском - то русский. Я лично рекомендую два маленьких трикса:

1) в Гвиме пропиши highlight lCursor guifg=NONE guibg=Red (цвета поставь по своему скину). В русской раскладке будет курсор красным и не нужно смотреть на то, какой у тебя язык стоит - видно по курсору.

2) Перебиндить Ескейп на КапсЛок. Я сейчас переучиваюсь - просто бомба. Ближе и удобнее на порядок. Биндить нужно через xmodmap, если будет интересно напишу подробнее.

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

Спасибо, на счёт подсветки - отличная идея. Попробую.

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

>2) Перебиндить Ескейп на КапсЛок. Я сейчас переучиваюсь - просто бомба. Ближе и удобнее на порядок. Биндить нужно через xmodmap, если будет интересно напишу подробнее.

На капслоке у меня переключение языков. Правильней, ИМХО, CTRL-[ использовать...

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

>На капслоке у меня переключение языков.

У меня, кстати, тоже :) Невероятно удобно.

>Правильней, ИМХО, CTRL-[ использовать...

Почему именно CTRL-[?

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