터미널에서는 Ctrl+ A와 Ctrl+ Shift+ A를 구분할 수 없습니다. 둘 다 동일한 키 코드를 내 보냅니다. 그래서 Vim이 할 수없는 이유를 알 수 있습니다. 그러나 X 애플리케이션 인 gVim은 Ctrl+ A와 Ctrl+ Shift+를 구별 할 수 있습니다 A. 이 두 가지를 다르게 매핑 할 수있는 방법이 있습니까?
우선, 다음과 같은 작업을하고 싶습니다. “클립 보드에서 붙여 넣기”가 Gnome 터미널처럼 작동하도록하고 Ctrl+ V를 시각적 모드로 유지 합니다.
:nmap <C-S-V> "+gP
답변
Gvim은 Vim이 할 수 없기 때문에하지 않습니다 (일반적인 상황에서). 미안하지만 그게 바로 그거야.
하나…
일부 터미널 (예 : xterm 및 iterm2)은 모든 키 조합에 대해 임의의 이스케이프 시퀀스를 보내도록 구성 할 수 있습니다.
예를 들어,에 다음을 추가 .Xresources
xterm을 전송하기 <Esc>[65;5u
위해 CtrlShiftA. 그런 다음 Vim에서 <C-S-a>
. (65는 shift-a의 십진 유니 코드 값이고 5는 ctrl 수정 자에 대한 비트입니다.이 경우 u는 “유니 코드”를 나타냅니다.)
! .Xresources
XTerm*vt100.translations: #override Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u")
iTerm 및 [u] rxvt도이를 수행하도록 구성 할 수 있습니다 (예는 제공되지 않음).
답변
이미 지적한 바와 같이, 매핑 할 방법이 없다 <C-S-A>
다르게 <C-A>
.
그러나 autokey
(Linux 및 Windows 용) 또는 autohotkey
( Windows 용) 과 같은 도구를 사용하여 <C-S-A>
특정 응용 프로그램에 대해 다른 키 입력을 보내도록 다시 매핑 할 수 있습니다 .
예를 들어 내 시스템에서이 설정이 있습니다 autokey
.
$ 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.
다음 속성을 할당합니다.
- 키보드 단축키
ctrl+shift+a
- 창 클래스 :
gnome-terminal-server.Gnome-terminal
그런 다음 원하는대로 ~/.vimrc
매핑을 만들 수 있습니다 <S-F1>a
.
메모:
- 나는
<S-F1>
탐지를 위해 일종의 리더 키로 사용 했습니다<C-S>
. 내 단말기가 수락하지 않았습니다 때문이었다<F13>
–<F37>
등 키. 응용 프로그램에서 지원하는 경우gvim
해당 키를 사용하는 것이 좋습니다. - 나는 주로
vim
에서gnome-terminal
. 그래서window class = gnome-terminal-server.Gnome-terminal
필터로 사용 했습니다.gvim
원하는 경우 사용하도록 수정하십시오 .autokey
클래스 / 제목과 같은 다른 창의 속성을 캡처하기위한 버튼을 지원합니다.
답변
기존 CV 기능을 잃어 버리는 것이 귀찮다면 대신 CQ를 사용할 수 있습니다. : help CTRL-V-alternative를 참조하십시오.
답변
NeoVim은 이제 터미널과 GUI 클라이언트 모두에이 기능을 제공합니다. : h nvim-features-new를 참조하십시오 .
답변
키보드 입력이 내부적으로 처리되는 방식으로 인해 안타깝게도 오늘날 GVIM에서도 일반적으로 불가능합니다. Ctrl+ 비 알파벳 과 같은 일부 키 조합 은 매핑 할 수 없으며 Ctrl+ 문자 대 Ctrl+ Shift+ 문자는 구분할 수 없습니다. (단말기가 고유 한 termcap 코드를 보내지 않는 한 대부분은 그렇지 않습니다.) 삽입 또는 명령 줄 모드에서 키 조합을 입력 해보십시오. 아무 일도 일어나지 않거나 삽입되면 해당 키 조합을 사용할 수 없습니다. 이것은 또한 <Tab>
/ <C-I>
, <CR>
/ <C-M>
/ <Esc>
/ <C-[>
등에 적용됩니다 . (예외는 <BS>
/ <C-H>
입니다.) 이것은 알려진 문제점이며 vim_dev 및 #vim IRC 채널에 대한 다양한 논의의 주제입니다.
일부 사람들 (이전 Paul LeoNerd Evans)은 (이를 지원하는 터미널의 콘솔 Vim에 대해서도)이를 수정하고 다양한 제안 인 cp를 떠올 렸습니다. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
그러나 현재로서는 아직 패치 나 자원 봉사자가 나오지 않았지만, 많은 사람들이 향후 Vim 릴리스에서이 기능을 사용하고 싶다고 표현했습니다.
답변
언급했듯이 동일한 키 코드를 얻습니다. 따라서 이들을 구별하는 유일한 방법은 Shift이벤트 처리 기능에서 키 의 상태를 확인하는 것입니다 . 물론 키 누르기와 처리 사이에 0.5 초 이상의 지연이 있으면 일부 히트를 놓칠 수 있습니다.
답변
