2013-07-05 3 views
1

Чтобы сэкономить время в Vim, я придумал идею. Отобразить: w привязка ключа к Esc как в обычном режиме, так и в режиме вставки. Однако он работает только в режиме вставки, тогда как в нормальном режиме все становится беспорядочным, когда я открываю новый файл. Это то, что я добавил в .vimrc:Карта: w для выхода из режима вставки и нормального режима

:inoremap <Esc> <Esc>:w<CR> 
:nnoremap <Esc> :w<CR> 

Как я уже говорил, первая команда работает отлично. Но добавив вторую команду, ключи перепутались ESPECIALLY, когда я открываю новый файл. Например, хотя я явно добавил в .vimrc:

map <up> <nop> 
map <down> <nop> 
map <left> <nop> 
map <right> <nop> 

, добавив вторую команду для нормального режима, нажав вверх вниз влево или вправо вызвать, чтобы войти в режим вставки и добавить ABC D.

Не могли бы вы помочь мне в достижении моей идеи?

ответ

3

Информация о Vim FAQ 10.9 may be useful:

10.9. When I use my arrow keys, Vim changes modes, inserts weird characters 
    in my document but doesn't move the cursor properly. What's going on? 

There are a couple of things that could be going on: either you are using 
Vim over a slow connection or Vim doesn't understand the key sequence that 
your keyboard is generating. 

If you are working over a slow connection (such as a 2400 bps modem), you 
can try to set the 'timeout' or 'ttimeout' option. These options, combined 
with the 'timeoutlen' and 'ttimeoutlen' options, may fix the problem. 

The preceding procedure will not work correctly if your terminal sends key 
codes that Vim does not understand. In this situation, your best option is 
to map your key sequence to a matching cursor movement command and save 
these mappings in a file. You can then ":source" the file whenever you work 
from that terminal. 

For more information, read 

    |'timeout'| 
    |'ttimeout'| 
    |'timeoutlen'| 
    |'ttimeoutlen'| 
    |:map| 
    |vt100-cursor-keys| 

От :h vt100-cursor-keys:

Other terminals (e.g., vt100 and xterm) have cursor keys that send <Esc>OA, 
<Esc>OB, etc. ... 

Так, вероятно, ваш nnoremap вызывает Esc на последовательности клавиш со стрелками, чтобы сохранить файл, а остальные символы интерпретируются один, поэтому A входит в режим вставки.

Вы можете использовать опцию 'autowriteall' или использовать другое сопоставление для сохранения файла; они определены в $VIMRUNTIME\mswin.vim:

" Use CTRL-S for saving, also in Insert mode 
noremap <C-S>  :update<CR> 
vnoremap <C-S>  <C-C>:update<CR> 
inoremap <C-S>  <C-O>:update<CR> 

Команда :update похожа на :w, но только пишет, только если файл был изменен.

1

Кроме того, вы можете использовать

autocmd InsertLeave * write

Смежные вопросы