2012-08-23 4 views
3

나는 :only (:help :only)를 실행하는 기본 명령입니다 <C-w>o 매핑을 해제하기 위해 노력하고있어, 그래서 시도 우선은 다음과 같습니다빔의 동작은

nmap <c-w>o <nop> 

이런 종류의-의 작품, <c-w>을 누른 경우를 제외하고 timeoutlen ms 이상을 기다린 다음 o을 누르면 :only이 호출됩니다.

timeoutlen ms 이후에 <c-w> -prefixed 및 다른 기본 명령이 시간 초과되지 않는 이유는 모르겠지만 이것은 예상치 못한 일입니다. 내가 대신 ZoomWin 플러그인의 부르심을 받았습니다 왜 때때로 :only command 이해할 수 없었다의 나는이 때 플러그인 매핑이라는있어 실현 <c-w>o 효과적으로 :only 명령을 덮어 쓰기 :

는 이전에 나는 자신의 매핑을 정의하는 ZoomWin 플러그인을했다 ( timeoutlen ms 후에) 시간을 초과 한 다음 o을 눌렀으며 대신 <c-w>o 명령을 호출했습니다.

그래서 사용자 정의 매핑과 마찬가지로 기본 명령을 타임 아웃 할 수 있습니까?

+1

을': showcmd'은 키 바인딩 패딩을 표시합니다 설정합니다. 하단에 '^ W'가 표시되면 'ESC'키를 눌러 취소 할 수 있습니다. – kev

답변

1

한 명령, 당신은 대신 "창 조작 서브 모드를 시작합니다"와 같은 <C-w>에 대해 생각해야되는 것은 약 <C-w>o 생각한다 : 다른 multikey 정력 정상 모드 명령처럼 <C-w>{smth}은 (또한 g*z*, Z*)은 단지 면역 아니다 시간 초과로 <C-w>% (<C-w>{any-key-not-mentioned-in-help})은 아무 것도하지 않습니다 (경고음이 들리지만 시스템에서 'visualbell'로 볼 수 없거나 경고음이 들릴 수 없음). 해당 괄호로 전환하지 마십시오 (%의 기본값 임).

당신은 여전히 ​​다음과 같은 방식으로 <C-w>를 매핑하여 <C-w>o 해제 할 수 있습니다

function s:CtrlW() 
    let char=getchar() 
    if type(char)==type(0) | let char=nr2char(char) | endif 

    if char is# 'o' 
     return '' 
    endif 
    return "\<C-w>".char 
endfunction 
nnoremap <expr> <C-w> <SID>CtrlW() 
0

<C-w>o에 아무 것도하지 않거나 다른 것으로 매핑 하시겠습니까?

<C-w>o<nop> 또는 :unmap에 분별 될 것 같지 않습니다, 그래서 그것이 사라지게 할 그 쉽지 않은 것 같습니다. 그래도 그럴만한 이유가 있습니다. 반복 씹기 때문에 명령을 제거하는 것은 일 수 있습니다. "may") <C-w>o은 실수로 뚱뚱한 손가락을 때리는 것이 쉽지 않습니다. 그들은 아마도 매핑으로 처리되지 않기 때문에 시간이 초과하지 않는

nnoremap <C-w>o o 
+0

이전에 ZoomWin 플러그인으로 매핑 했었지만 매핑 시간 초과 및 "오버로드"문제가 발생하여 매핑이 ''으로 매핑되기를 바랍니다. 플러그인 매핑을 변경한다는 것을 깨닫게되었습니다. 그러나 실제로, 나는 단지' '을'timeoutlen' 이후에 타임 아웃시켜야하는 이유가 없기 때문에 그것을 원한다. – molok

0

기본 명령 :

당신은, 그러나, 쉽게처럼 뭔가에 매핑 할 수 있습니다. :h ttimeout에 설명 된대로 'timeoutlen' 후 키는 모든 매핑에 부착되지 않습니다

'timeout' 'ttimeout'  action ~ 
    off  off  do not time out 
    on  on or off time out on :mappings and key codes 
    off  on  time out on key codes 

If both options are off, Vim will wait until either the complete 
mapping or key sequence has been received, or it is clear that there 
is no mapping or key sequence for the received characters. For 
example: if you have mapped "vl" and Vim has received 'v', the next 
character is needed to see if the 'v' is followed by an 'l'. 
When one of the options is on, Vim will wait for about 1 second for 
the next character to arrive. After that the already received 
characters are interpreted as single characters. 

그래서 <C-w>o의 키가 단일 문자로 해석하고 기본 명령을 트리거한다. 'timeout''ttimeout'을 사용하는 것이 좋습니다.

1

왜 내장 명령이 'timeout' 이후에 중단되지 않는지 이해할 수 없습니다. 나는 이것이 더 일관성이 있음을 발견 할 것이다. 그러나 이것은 지금까지 나를 괴롭히지 않았다.

나는 당신이 원하는 것을 성취 할 수있는 길을 찾았다 고 생각하지만, 성가시다. Ctrl-W 자체를 중립화해야합니다. Ctrl- \ Ctrl-N은 <Esc>과 비슷하지만 경고음이 없습니다. <Nop>을 사용할 때 이후 명령은 그 사이에 다른 명령을 실행하기 전까지는 작동하지 않습니다.이 모든 내장 명령을 비활성화로

:nnoremap <C-w> <C-\><C-n> 

는, 당신은 자신에 그들을지도해야한다 :

:nnoremap <C-w><C-w> <C-w><C-w> 
:nnoremap <C-w>s  <C-w>s 
... 

이 루프를 통해 자동화 할 수 있습니다합니다 (Ctrl-W O를 제외하고, 당신은 <Nop>으로 매핑되기를 원합니다.) 그러나 그것은 여전히 ​​추악합니다.