Ctrl저는 Putty, Suse box, Vim 7.2를 조합하여 편집하고 있는데 + 키 입력을 특정 작업에 Arrow다시 매핑 하고 싶습니다 . 그러나 어떤 이유로 Vim은 단축키를 무시하고 삽입 모드로 들어가서 문자 D
( Ctrl+ ←) 또는 문자 C
( Ctrl+ →)를 삽입합니다.
내 키보드/터미널 구성의 어떤 부분이 문제이며 어떻게 해결할 수 있습니까?
답변1
삽입 모드에서 + , +arrow 를 입력하여 터미널이 +arrow에 대해 전송하는 이스케이프 시퀀스가 무엇인지 정확히 알아보세요 Ctrl. 이렇게 하면 문자 그대로 선두 문자(vim에서와 같이)가 삽입되고 나머지 이스케이프 시퀀스가 이어집니다. 그런 다음 vim에게 다음과 같은 이스케이프 시퀀스를 알려주세요.CtrlVCtrlESC
^[
map <ESC>[5D <C-Left>
map <ESC>[5C <C-Right>
map! <ESC>[5D <C-Left>
map! <ESC>[5C <C-Right>
Putty에는 기본 설정이 있었던 것으로 기억합니다애플리케이션 커서 키 모드이는 불편하므로(이유는 잊어버렸습니다) 먼저 이 설정을 전환해야 할 수도 있습니다.
이스케이프 시퀀스는 터미널마다 다르지만 충돌(즉, 다른 터미널의 다른 키에 해당하는 이스케이프 시퀀스)은 거의 없으므로 특정 터미널 유형에만 매핑을 적용하려고 할 필요는 없습니다.
답변2
가장 좋은 방법은 PuTTY를 보는 것입니다.애플리케이션 커서 키 모드구성.
기본 시퀀스는 ESC접두사로 전송되고 [
그 뒤에는 A
pend 또는 C
hange 또는 삽입 모드로 들어가는 항목이 옵니다.
Gilles 이후에 추가됨
^V 이스케이프의 좀 더 명확한 버전은 od(1)에서 볼 수 있습니다. 제가 터미널에 입력한 내용은 다음과 같습니다. ^Up, ^Down, ^Right, ^Left:
$ od -a
0000000 esc [ 1 ; 5 A esc [ 1 ; 5 B esc [ 1 ;
0000020 5 C esc [ 1 ; 5 D
^[[1;5A
+를 누르면 Ctrl내 터미널이 전송됩니다 .↑
답변3
여기에서 더 나은 해결책을 찾았습니다. http://vim.wikia.com/wiki/Fix_arrow_keys_that_display_A_B_C_D_on_remote_shell
다음 문자열을 .vimrc
파일에 넣으세요.
:set term=cons25
고쳐 쓰다
이 파일을 귀하의 파일에 복사하고 /home
이름을 바꾸십시오 .vimrc
.
/usr/share/vim/vim_VERSION_/vimrc_example.vim
답변4
2010년에 이 질문이 제기되었을 때(그리고 늦어도 2013년 이전에 다른 답변이 제공되었을 때) PuTTY는 구별할 수 없었습니다.제어커서 키에 대한 수정자입니다. VT100 스타일 일반 및 응용 프로그램 커서 키만 보냅니다. 특히 ""와 같은 단어가 포함된 답변은 <ESC>[1;5A
OP의 문제를 해결하지 못합니다.
10여년이 지난 후 PuTTY는 다음 커밋에서 볼 수 있듯이 xterm에서 파생된 솔루션을 제공합니다.
commit 22911ccdcc37c7955bfc1c45a88d3762d1206da7
Author: Simon Tatham <[email protected]>
Date: Mon Oct 18 20:00:25 2021 +0100
New config option for shifted arrow key handling.
This commit introduces a new config option for how to handle shifted
arrow keys.
In the default mode (SHARROW_APPLICATION), we do what we've always
done: Ctrl flips the arrow keys between sending their most usual
escape sequences (ESC [ A ... ESC [ D) and sending the 'application
cursor keys' sequences (ESC O A ... ESC O D). Whichever of those modes
is currently configured, Ctrl+arrow sends the other one.
In the new mode (SHARROW_BITMAP), application cursor key mode is
unaffected by any shift keys, but the default sequences acquire two
numeric arguments. The first argument is 1 (reflecting the fact that a
shifted arrow key still notionally moves just 1 character cell); the
second is the bitmap (1 for Shift) + (2 for Alt) + (4 for Ctrl),
offset by 1. (Except that if _none_ of those modifiers is pressed,
both numeric arguments are simply omitted.)
The new bitmap mode is what current xterm generates, and also what
Windows ConPTY seems to expect. If you start an ordinary Command
Prompt and launch into WSL, those are the sequences it will generate
for shifted arrow keys; conversely, if you run a Command Prompt within
a ConPTY, then these sequences for Ctrl+arrow will have the effect you
expect in cmd.exe command-line editing (going backward or forward a
word). For that reason, I enable this mode unconditionally when
launching Windows pterm.
설정 대화 상자 항목은 config.c에 있습니다.
ctrl_radiobuttons(s, "Shift/Ctrl/Alt with the arrow keys", 'w', 2,
HELPCTX(keyboard_sharrow),
conf_radiobutton_handler,
I(CONF_sharrow_type),
"Ctrl toggles app mode", I(SHARROW_APPLICATION),
"xterm-style bitmap", I(SHARROW_BITMAP));
"비트맵"은 테이블을 나타냅니다.XTerm 제어 순서:
Code Modifiers
---------+---------------------------
2 | Shift
3 | Alt
4 | Shift + Alt
5 | Control
6 | Shift + Control
7 | Alt + Control
8 | Shift + Alt + Control
9 | Meta
10 | Meta + Shift
11 | Meta + Alt
12 | Meta + Alt + Shift
13 | Meta + Ctrl
14 | Meta + Ctrl + Shift
15 | Meta + Ctrl + Alt
16 | Meta + Ctrl + Alt + Shift
---------+---------------------------
그래서... 개발자의 설명에 따르면 xterm에서 작동하는 설정이 PuTTY에서도 작동해야 합니다. 이는 2000년경 PuTTY 개발이 시작된 이후 xterm의 기능이었습니다.2002년, 2021년에 이 세부 사항을 수정하는 것이 "오래 기다려왔습니다."
추가 자료:
- PC 스타일 기능 키, 존재하다XTerm 제어 순서
- Shift 또는 Control 수정자를 사용하는 방법은 무엇입니까?(ncurses FAQ)