2009-10-01 3 views
57

은, 하나는 및 Ctrl 키 + 쉬프트 둘 다 같은 키 코드를 방출로 + Ctrl 키 + 을 구별 할 수 없기 때문에 빔이 그것을 할 수없는 이유를 알 수 있습니다. 그러나 GVIM는 X 응용 프로그램 인, + Ctrl 키 + Ctrl 키 + 시프트을 차별화 할 수 있습니다. 이 두 가지를 다르게 매핑 할 수있는 방법이 있습니까?Ctrl + A와 Ctrl + Shift + A를 어떻게 다르게 매핑합니까? 터미널에서

우선, 나는 다음과 같은 일을하고 싶습니다 : 그놈 터미널 같은 작업 "클립 보드에서 붙여 넣기"확인, 시각적 모드로 Ctrl 키 + V을 유지하면서.

:nmap <C-S-V> "+gP 
+2

귀하의 질문에 대한 답변이 없지만 허드슨을 사랑한다고 말씀 드리고 싶습니다. –

+0

허드슨을 이용해 주셔서 감사합니다! –

+1

가능합니다 : http://vim.wikia.com/wiki/Mapping_fast_keycodes_in_terminal_Vim – vivoconunxino

답변

29

gim은 vim이 (정상적인 상황에서는) 할 수 없기 때문에 그렇게하지 않습니다. 미안 해요,하지만 그건 그게 맞아요. 그러나


...

일부 단말 (예를 들면,과의 xterm iterm2)는 키의 모든 조합에 대한 임의의 제어 시퀀스를 전송하도록 구성 될 수있다.

예를 들어, Ctrl 키시프트에 대한 <Esc>[65;5u을 보내 xterm에 대한 .Xresources에 다음을 추가합니다. 그런 다음 Vim에서이를 <C-S-a>으로 매핑 할 수 있습니다. (65 변속 A의 소수 유니 코드 값이고 5는 CTRL 개질제를위한 비트이다.이 경우의 U "는 유니 코드 '를 나타낸다.)

! .Xresources 
XTerm*vt100.translations: #override Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u") 

하여 ITerm 및 [U]는 rxvt도 구성 될 수있다 이를 위해 (제공되지 않은 예제).

더 많은 정보는 : http://www.leonerd.org.uk/hacks/fixterms/

+0

여러 키를 다시 매핑하려면 [이 문서] (http : //www.in-ulm./ mascheck/X11/xterm/XTerm) : 키 엔트리를'\ n'으로 구분합니다. 백 슬래시를 사용하여 줄을 분할하십시오. 예 : '텀 * vt100.translations : 또한 에게 CSBCSF 사용이지도하는 #override Ctrl 키 ~ 메타 이동 A : 문자열 (0x1b) 문자열 ("[65; 5U") \ n Ctrl 키 ~ 메타 시프트 B : 문자열 (0x1b) 문자열 ("[66; 5u") \ n Ctrl ~ 메타 시프트 f : 문자열 (0x1b) 문자열 ("[70; 5u")] – cfi

+0

완전을 위해, 이것을 vi로 매핑 하시겠습니까? 예 : 'map [66; 5u : echo "ctrl-shift-b는" "를 수신하여 ctrl-shift-b를 매핑하여 상태 표시 줄에 메시지를 인쇄합니다. AskUbuntu에는 비슷한 Q가 있었고 [요약] (http://askubuntu.com/a/677070/28323)이 있습니다. – cfi

+0

새로운 터미널 사양이 필요합니다! 'xterm-256color' (가장 최근의 것)는 많은 한계를 겪고 있습니다. – Jezz

1

앞서 말씀 드렸듯이 동일한 키 코드가 있습니다. 따라서 이들을 구별하는 유일한 방법은 이벤트 처리 기능에서 Shift 키의 상태를 확인하는 것입니다. 물론, 키 누르기와 프로세싱 사이에 0.5 초 이상의 지연이 있으면, 몇 가지 히트를 놓치게됩니다.

+1

내 질문의 요점은 gvim이 차별화를 위해 의존 할 수있는 gvim 관련 확장 기능이 있는지를 (심지어 평범한 vim은 알 수 없지만) 그렇게 구분할 수 있다는 점을 감안할 때, Ctrl + Shift + V와 Ctrl + V. –

+6

똥 열쇠의 상태를 확인하는 방법? 검색했지만 원격으로도 유용한 것을 찾지 못했습니다. – bolov

4

당신이 기존의 C-V 기능을 잃어버린되어 귀찮게 대신 C-Q를 사용 할 수 있습니다. CTRL-V-alternative를 참조하십시오.

0

NeoVim은 이제이 기능을 단말기 및 GUI 클라이언트에 제공합니다. :h nvim-features-new

+2

터미널에서 CSI 코드를 활성화하지 않는 이상은 아닙니다. Neovim이 지원하는 CTRL-SHIFT 변형은 대부분 인쇄 할 수없는 문자입니다 (예 : http://neovim.org/doc/user/vim_diff.html#nvim-features-new). 그러나 * 메타 * 화음 (''변종 포함)은 대부분 상자에서 완전히 작동합니다. –

+0

명확히하고 & 좋은 일을 계속 해줘서 고마워. :) – OliverUv

1

이미 지적했듯이 <C-S-A><C-A>과 다르게 매핑 할 수있는 방법은 없습니다.

그러나, 사용 도구는 autokey처럼 또는 (Windows 용) autohotkey (리눅스 & Windows 용), 특정 애플리케이션을위한 다른 키 스트로크 (들)을 보내 <C-S-A>을 다시 매핑 할 수 있습니다.

  1. 키보드 바로 가기 창 클래스
  2. ctrl+shift+a로 : 그런 다음 gnome-terminal-server.Gnome-terminal

당신의 ~/.vimrc

$ cat ~/.config/autokey/data/gnome-terminal/ctrlshifta-gnome-terminal.py 
#ctrl+shift+a sends '<S-F1>a' 
keyboard.send_keys("<shift>+<f1>a") # Note that `f` in `f1` needs to be in lower case. 

이러한 속성을 할당합니다 : 내 시스템에, 나는 autokey에서이 설정을 <S-F1>a에 대한 매핑을 만들어 원하는대로 할 수 있습니다.


참고 : 나는 <C-S>을 검출 리더 키의 일종으로 <S-F1>을 사용했다

  1. . 내 단말기가 <F13> - <F37> 등의 키를 받아들이지 않았기 때문입니다. 응용 프로그램에서 지원하는 경우 해당 키를 사용하는 것이 좋습니다 (gvim라고 생각합니다).
  2. 나는 주로 vim에서 gnome-terminal입니다. 그래서 나는 필터로 window class = gnome-terminal-server.Gnome-terminal을 사용했다. 원하는 경우 gvim을 사용하도록 수정하십시오. autokey은 class/title과 같은 다른 창의 속성을 캡처하는 버튼을 지원합니다.
+0

감사합니다 힙. 거기에 많은 정보가 있지만 키 재 매핑을 위해 Autokey를 사용하는 방법에 대해서는 실제 지침이 없습니다. 마지막으로 당신의 대답은 그렇게합니다. 나는 아무도 너를 상향 시켰다고 믿을 수 없다. – pickle323

+0

신의 저주 autokey! 내가 할 수있는 모든 것을했지만 내 우분투 16.04에 설치하지 못했습니다. –

+0

'apt install autokey-gtk'? – anishsane

0

키보드 입력이 내부적으로 처리되는 방식 때문에, 현재 GVIM에서도 일반적으로 불가능합니다. Ctrl 키 + 알파벳이 아닌 같은 일부 키 조합은 매핑 할 수 없으며, Ctrl 키 + 편지 대 Ctrl 키 + 시프트 + 문자를 구별 할 수 없습니다. (당신의 터미널이 뚜렷한 termcap 코드를 보내지 않는 한, 대부분 그렇지 않습니다.) 삽입이나 명령 줄 모드에서, 키 조합을 입력 해보십시오. 아무 것도 일어나지 않거나 삽입되면 해당 키 조합을 사용할 수 없습니다. 이것은 또한, <Tab>/<C-I> 적용/<C-M>/<Esc>/<C-[><CR> 등 (유일한 예외 <BS>/<C-H>이다.)이 공지 된 통증 점, 다양한 vim_dev 논의하고 #vim의 IRC 채널의 주제이다.

어떤 사람들 (Paul LeoNerd Evans)은 (이것을 지원하는 터미널의 콘솔 Vim의 경우조차도) 문제를 해결하고 다양한 제안을 흘렸습니다. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

그러나 오늘날까지 패치 나 자원 봉사자는 아직 나오지 않았습니다. 많은 사람들이 향후 Vim 릴리스에서 이것을 갖고 싶다는 의사를 표명했습니다.

관련 문제