Я пытаюсь создать 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».

1 ответ1

0

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

nnoremap ii gg

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .