Карта: w для Escape в режиме вставки и в обычном режиме

Вопрос:

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

: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.

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

Лучший ответ:

Полезная информация о Vim FAQ 10.9 может быть полезной:

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 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

Оцените статью
TechArks.Ru
Добавить комментарий