2014-05-24 9 views
1

이 문제는 나를 정말 미치게합니다. 과거에는 Windows 7에서 Gvim과 Autohotkey를 사용했습니다. 여러 가지 이유로 CTRL + D를 입력하여 좋아하는 동작을 매핑했습니다. 이것은 지금까지 잘 작동했습니다.이 키 매핑이 Vim에서 작동하지 않는 이유는 무엇입니까?

nnoremap <cr> <PageDown> 

이 좋은 일 : 는 GVIM에서 나는 페이지 아래로 키의 역할을 돌아/입력 매핑. 지난 주에 우분투를 다시 시도하기로 결정했습니다.

Autokey를 사용하여 Ctrl + D를 다시 매핑하여 Enter를 실행합니다.

keyboard.send_key("<enter>") 

은 텍스트 편집기에서, 브라우저/크롬, 우분투/주 분투의 모든 모든 것을 잘했다. Gnome 터미널을 사용하고 있습니다. 그리고 CTRL + D는 Enter와 같이 동작합니다.

삽입 모드에서 Vim에있을 때 CTRL + D는 Enter와 동일합니다. 정상 모드에서는 nnoremap을 사용하여 예상되는 동작을 얻지 못합니다.

CTRL + D가 터미널에서 잘 작동하고 Vim에서 삽입 모드로 작동한다는 사실을 감안할 때 매우 이상한 것으로 나타났습니다. 나는 '진짜'Enter를 누를 때. 나는 Vim에서 페이지 다운을 얻었지만 매핑 된 CTRL + D와 함께 정상 모드에서는 같은 동작을하지 않는다. 삽입 모드에서는 Enter와 같은 동작을합니다. 그 중

nnoremap <return> <PageDown> 

nnoremap <Enter> <PageDown> 

nnoremap <cr> ij 

nnoremap <CR> ij 

아무것도 정상 모드에서 CTRL + D로 지금까지 일하지 : 나는 같은 문제를 감지하기 위해,지도를 변경했습니다. 이상하게도 삽입 모드와 터미널에서 잘 작동한다는 것을 알게되었습니다. Vim의 매뉴얼을 살펴 보았습니다. 아무 결과도없이.

Vim을 일일 편집자로 사용하므로이 문제가 일반 모드에서 왜 발생하는지 이해할 수 없기 때문에 Vim을 일일 편집자로 사용합니다. 누구가 거기에서 무슨 일이 일어나고 있는지 아십니까? 이것이 나를 정말로 미치게 만들고 있기 때문에 당신의 도움에 정말로 감사 할 것입니다.

+0

정상 모드에서 Vim이받은 _is_은 무엇입니까? ': '을 누르면 무엇이 표시됩니까? 이것이'^ M '(또는 다른 어떤 것도 mappable)이라면,': nnoremap '으로 해결할 수 있습니다. –

+0

답장을 보내 주셔서 감사합니다. Vim의 명령 줄에 다음과 같이 입력했습니다. 그런 다음 오류 메시지가 나타납니다. E488 : 후행 문자. 하지만 내 명령에는 공백이 없습니다. 그 메시지를받는 이유는 무엇입니까? –

+0

@JuliusMartin 'while nr2char (getchar (1))! = "\ "동안 사용해보세요. echomsg 문자열 (getchar (1)) 문자열 (nr2char (getchar())) | endwhile : 수신 된 문자를'code '문자'형태로 반향시켜야합니다.비록 당신이 창문에있을 때 나는 어쩌면'behave mswin'을 어딘가에 가지고 있고''을 재 매핑하기 때문에': '도 체크 할 것입니다. – ZyX

답변

1

나는 고치지 않았다. 그래서 나는 그것을 다른 방식으로 해킹하기로 결정했다.

이 내 자동 키 스크립트

winTitle = window.get_active_title() 
if 'VIM' in winTitle: 
    output = "<f8>" 
    keyboard.send_key(output) 

else: 
    output = "<PageDown>" 
    keyboard.send_key(output) 

이다 나는 VIM 윈도우가있는 경우는, 참조, CTRL + D 빔에 F8을 보내드립니다.

나는 빔이 같은 F8 매핑 : 그것은 일

map <f8> <CR> 
nnoremap <CR> <PageDown> 

을하지만, 방법으로는 될 운명이 아니었다. 하지만 다른 선택의 여지가 없었습니다. 도와 주셔서 감사합니다 Zyx와 romainl, 많은 감사드립니다!