Vim: оператор ожидания отложенного режима не работает

345
Sergey Nikolayvich

Я пытаюсь создать vimscript, который можно использовать с упрощенным макетом Dvorak. Т.е., учитывая, что клавиши на клавиатуре, подключенной к компьютеру, расположены в упрощенном макете Dovark (и соответствующие настройки клавиатуры системы), я хочу написать vimscript, который заставит vim использовать макет Dvorak только в режиме вставки : во всех остальных режимах раскладка клавиатуры будет QWERTY.

Вот что у меня есть:

"Keys between the 0 and the backspace noremap [ - noremap { _ noremap ] = noremap } +  "Keys from the tab till the end of the row noremap ' q noremap " Q noremap, w noremap < W noremap . e noremap > E noremap p r noremap P R noremap y t noremap Y T noremap f y noremap F Y noremap g u noremap G U noremap c i noremap C I noremap r o noremap R O noremap l p noremap L P noremap / [ noremap ? { noremap = ] noremap + }  "Home row keys noremap o s noremap O S noremap e d noremap E D noremap u f noremap U F noremap i g noremap I G noremap d h noremap D H noremap h j noremap H J noremap t k noremap T K noremap n l noremap N L noremap s ; noremap S : noremap -, noremap _ "  "Keys for the row below the home row noremap ; z noremap : Z noremap q x noremap Q X noremap j c noremap J C noremap k v noremap K V noremap x b noremap X B noremap b n noremap B N noremap w, noremap W < noremap v . noremap v > noremap z / noremap Z ?  "Same as above but now for the console  "Keys between the 0 and the backspace cnoremap [ - cnoremap { _ cnoremap ] = cnoremap } +  "Keys from the tab till the end of the row cnoremap ' q cnoremap " Q cnoremap, w cnoremap < W cnoremap . e cnoremap > E cnoremap p r cnoremap P R cnoremap y t cnoremap Y T cnoremap f y cnoremap F Y cnoremap g u cnoremap G U cnoremap c i cnoremap C I cnoremap r o cnoremap R O cnoremap l p cnoremap L P cnoremap / [ cnoremap ? { cnoremap = ] cnoremap + }  "Home row keys cnoremap o s cnoremap O S cnoremap e d cnoremap E D cnoremap u f cnoremap U F cnoremap i g cnoremap I G cnoremap d h cnoremap D H cnoremap h j cnoremap H J cnoremap t k cnoremap T K cnoremap n l cnoremap N L cnoremap s ; cnoremap S : cnoremap -, cnoremap _ "  "Keys for the row below the home row cnoremap ; z cnoremap : Z cnoremap q x cnoremap Q X cnoremap j c cnoremap J C cnoremap k v cnoremap K V cnoremap x b cnoremap X B cnoremap b n cnoremap B N cnoremap w, cnoremap W < cnoremap v . cnoremap v > cnoremap z / cnoremap Z ? 

Но по какой-то причине, нажав «ii» на физической клавиатуре, которая должна перейти к началу документа (поскольку как в обычном режиме, так и в режиме ожидания оператора клавиша «i» отображается на «g»), vim идет в режим вставки. Однако нажатие «ig» на физической клавиатуре действительно приводит к переходу к началу документа.

Проблема сохраняется как в Linux, так и в Windows.

Почему не работают карты в режиме ожидания? В справке Vim говорится, что «noremap» переназначает все режимы, кроме «Вставка», «Консоль», «Терминальное задание» и «Lang-Arg».

0
копия https://vi.stackexchange.com/questions/17911/operator-pending-mode-remaps-not-working Christian Brabandt 5 лет назад 0

1 ответ на вопрос

0
Ingo Karkat

ggне нормальный режим g+ движение g; это полное отображение нормального режима само по себе, и оно должно отображаться так:

nnoremap ii gg 

Тем не менее, я думаю, что весь ваш подход несовершенен и вызовет проблемы. По крайней мере, макеты Дворжака обычно реализуются по-разному, с :help 'keymap'. См. Использование Vim с раскладкой клавиатуры Dvorak и ознакомьтесь $VIMRUNTIME/keymap/dvorak.vim.