2011-09-08 3 views
1

이 매핑을 xterm 터미널에서 vim으로 사용할 수 없습니다.vim의 숫자 키패드 키 매핑

:map <k0> :echo 'Hello'<CR> 

동일한 매핑을 gvim에서 올바르게 사용할 수 있습니다. 위의 명령을 vim에서 터미널에서 실행하면 받아 들여지고 :map을 입력하면 올바르게 표시됩니다. 그러나 정상 모드에서 키패드 키를 누르면 상태 표시 줄에 "0"이 표시되고 다음 키를 누르면 사라집니다.

Fedora 14와 함께 제공되는 vim을 사용하고 있습니다. 문제가있는 경우 일반 xterm을 사용하고 있습니다. 키패드 키는 numlock을 켜거나 끄는 삽입 모드에서 잘 작동합니다.

무엇이 누락 되었습니까?

답변

0

~/.Xdefaults이 줄을 추가하십시오 :

xterm*appkeypadDefault: false 

하고 다시 시작 xterm 등.

"응용 프로그램 키패드 모드"가 문제의 원인 일 가능성이 큽니다.

그러나 나는 당신이하고있는 일을해야한다고 생각하지 않습니다. --NORMAL-- 모드에서 숫자 입력은 4dd과 같이 "개수"를 나타내는 데 사용됩니다. 숫자를 다른 명령에 매핑하면 문제를 빨리 해결할 수 있습니다.

xterm 태그를 질문에 추가해야합니다.

+0

흠, 고마워. 그러나 이것은 효과가 없었다. 또한 'false'는 xterm * appkeypadDefault의 기본값이며 xterm 매뉴얼 페이지에 나와 있습니다. 나는 vim을 10 년 이상 동안 사용 해왔고 반복을 지정하기 위해 * keypad *를 사용하지 못했습니다 (홈 위치에서 손을 떼지 않아도 vim의 장점 중 하나입니다). 그래서 키패드 매핑을해도 괜찮습니다. – PonyEars

0

실제 질문을 나타내는 질문에 다소 모호한 점이 있습니다. vim은 그것이 기능 키라고 가정하고 k0에 대한 바인딩을 허용합니다. 당신이 숫자 기능 - 키 1에서 시작 볼 수

대부분의 키보드, 몇 터미널 설명은 또한 가능의 일부가 기능 키 위해 10 k0 그것을 동일시, 기능 키 1 k0에 동일시 누군가가 숫자 키패드의 일부라고 가정하지만 키패드는 기능 키와 다른 문자 시퀀스를 사용하기 때문에 가능성은 낮습니다.

사용자가 기능 키를 알고있는 터미널 설명을 사용했다고 가정합니다. vt100의 기능 키가 없으므로 vt100 터미널 설명은 그 기능을 수행하지 않습니다. (PF1 ~ PF4) 당신이 말하는 사람에 따라 다르거 나 그렇지 않은 사람이 있습니다. 그러나 TERM=vt100이 있다면 숫자 키패드의 일부은 터미널 설명을 기준으로 인식 할 수 있습니다 (예 : vt100+fnkeys description 위의 긴 설명 참조).

그러나 이것은 TERM=xterm에 없습니다.

당신이 간과하고있는 것은 vim (아마도 도움이 될 것입니다)이 내장 된 termcaps를 사용하여 터미널 설명을 수정한다는 것입니다. PF1 등을 인식합니다.

{K_XF1,    IF_EB("\033O*P", ESC_STR "O*P")}, 
{K_XF2,    IF_EB("\033O*Q", ESC_STR "O*Q")}, 
{K_XF3,    IF_EB("\033O*R", ESC_STR "O*R")}, 
{K_XF4,    IF_EB("\033O*S", ESC_STR "O*S")}, 

그러나 번호가 매겨진 키에 대한 항목이 없습니다. 0 키에는 "\033O*p"이 없습니다.

정력이 k0 (터미널 설명에)있다, 당신은 아무것도에 매핑하지 않은 경우, 정력 리터럴 0로 취급됩니다. 사실 k1 등과 같은 경우에도 기능 키와 숫자 키패드를 동일한 것으로 취급합니다.

GNU screen은 동일한 작업을 수행하지만 번호가 매겨진 키에도 적용됩니다. vimscreen 안에 넣으면 vim에 0 만 표시됩니다. vim에서 리터럴 0은 커맨드 모드를 많이 사용하지 않습니다.