LINUX.ORG.RU

Переключение на стандартный (не языковой) ввод после выхода из insert-mode или поиска

 ,


1

2

Задача такова: нужно чтобы при выходе из какого-либа режима ввода (после insert, после поиска или ввода команды), то-бишь по возвращении в нормальный режим, — vim переходил в обычный, не языковой ввод. А при переходе в какой-либо отличный от «нормального» режима, — снова включал возможность использовать keymap.

Сделал вот такое:

function KMOn()
    :set keymap=russian-jcukenwin
    :set iminsert=0
    :set imsearch=-1
endfunction
function KMOff()
    :set keymap=
endfunction
autocmd InsertEnter * call KMOn()
autocmd InsertLeave * call KMOff()
Но это касается только insert-mode, когда нужно искать, или вводить команду — тоже нужна возможность писать кириллицей, а по документации событий для autocmd — событий для поиска или ввода команды не нашлось.

Когда вводится команда — по-умолчанию используется дефолтный режим (не языковой) Частично решил так:

function ResetKeymap()
    :set keymap=
    :set keymap=russian-jcukenwin
    :set iminsert=0
    :set imsearch=-1
endfunction
command ResetKeymap call ResetKeymap()
autocmd InsertLeave * call ResetKeymap()
ResetKeymap
Единственное чего не хватает, назначить ResetKeymap() на выход из поиска.

Applejohn
() автор топика

Ничего не понял. Зачем вам это нужно: ставить / снимать keymap?

когда нужно искать, или вводить команду — тоже нужна возможность писать кириллицей

Не обнуляйте keymap — и тогда никто у вас такую возможность не отберет.

P.S. Кстати, с вызовом vi для редактирования команды вы разобрались или нет?

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

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

P.S. Кстати, с вызовом vi для редактирования команды вы разобрались или нет?

Отказался от vi-режима в баше, потому как Ctrl+←→ не передвигают по словам (как привык в vim-е), а трут посимвольно. Хотя над этим ещё подумаю, вашу идею понял, и решение данной проблемы может решиться аналогичным образом — может перебиндю Ctrl+←→

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

P.S. (оффтопик) пороясь на stackoverflow и тыкаясь в слепую: решил проблему с ctrl+←→:

# vi-mode
set -o vi
bind -m vi-insert '"\e[1;5C": vi-forward-word'
bind -m vi-insert '"\e[1;5D": vi-backward-word'
bind -m vi '"\e[1;5C": vi-forward-word'
bind -m vi '"\e[1;5D": vi-backward-word'

Applejohn
() автор топика

Насколько понял тебя интересует следующее

set langmap=ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ;ABCDEFGHIJKLMNOPQRSTUVWXYZ,фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz
baverman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.