Ctrl + 대문자를 Ctrl + 소문자와 별도로 매핑 할 수 있습니까?


16

창을 조금 더 빨리 탐색하는 방법을 알아 내려고 노력 중이므로 다음을 매핑하고 싶습니다.

:nmap <silent> <C-F> :wincmd f<CR>

문제는 이것이 페이지 ^f소문자 인 (소문자 f) 매핑을 다시 매핑한다는 것입니다. ^F대소 문자 만 다시 매핑 F하고 그대로 두는 ^f방법이 있습니까?

답변:


22

매핑하는 것은 <C-F>( Ctrl+letter)는 항상 매핑과 동일합니다 <C-f>( Ctrl+Shift+letter). 다른지도 없이는지도를 작성할 수 없습니다.

문제의 뿌리는 빔이 전송 터미널에서 문자를 읽어들입니다 ^F(ASCII 코드 0x06모두) Ctrl+fCtrl+Shift+f; Vim은 Shift 키를 눌렀는지 알 수 없습니다. 이 게시물은 터미널 및 제어 문자에 대한 추가 정보를 제공합니다 .

이론적으로 이것은 대부분의 (또는 모두?) 그래픽 환경이 훨씬 더 중요한 주요 이벤트를 전송하기 때문에 gVim으로 수행 할 수 있습니다. 그러나 불행히도 gVim은 터미널 에뮬레이터와 매우 유사하게 작동 <C-f>하며 <C-F>둘 중 하나를 구별 할 수 없습니다 (Vim-gVim 호환성을위한 디자인 결정일 것입니다).


가능한 해결책:

  • 를 누르면 터미널 에뮬레이터가 Vim에 다른 코드를 보내도록 구성 할 수 있습니다 Ctrl+Shift+f. 예를 들어, xterm의 경우 다음을 수행 할 수 있습니다.

    XTerm*VT100.translations: #override \n\
        Ctrl ~Meta Shift <Key>f: string(0x1b) string("[24;6~")\n\
        Ctrl ~Meta Shift <Key>r: string(0x1b) string("[23;6~")
    

    이에 대한 코드를 보낼 것입니다 <C-S-F12>그리고 <C-S-F11>당신이 선택할 수 있습니다 빔에 :

    nnoremap <C-S-F12> :echo 'ctrl+F pressed!'<CR>
    nnoremap <C-S-F11> :echo 'ctrl+R pressed!'<CR>
    
  • 터미널이 ( ) 또는 ( )에 대해 다른 코드를 보내므로을 매핑 할 수 있습니다 .Alt+Shift+letter<Esc>f0x1b0x66<Esc>F0x1b0x46

  • NeoVim은 내가 찾을 수있는 한 Ctrl+Shift+Enterand과 같은 몇 가지 경우를 제외 하고는이 문제를 해결하지 않았지만 나중에이 Ctrl+Shift+Tab기능이 추가 될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.