2013-07-05 5 views
1

빔에서 시간을 절약하기 위해 아이디어를 생각해 냈습니다. 매핑 방법 : 일반 모드와 삽입 모드에서 Esc 키 바인딩. 그러나 그것은 삽입 모드에서 작동하는 반면 일반 모드에서는 새로운 파일을 열 때 사태가 더러워집니다. 이것은 .vimrc에 추가 한 내용입니다.지도 : 인서트 모드와 일반 모드의 이스케이프 문자로 바꾸기

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

첫 번째 명령만으로도 제대로 작동합니다. 하지만 두 번째 명령을 추가하면 새 파일을 열 때 키가 엉망입니다. 예를 들어, 내가 명시 적으로의 .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' 옵션을 사용하거나 다른 매핑을 사용하여 파일을 저장할 수 있습니다.

" 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 비슷하지만 파일이 수정 된 경우에만 기록 : 이들은 $VIMRUNTIME\mswin.vim에 정의되어 있습니다.

또한
1

, 당신은 사용할 수 있습니다

autocmd InsertLeave * write