간단한 질문: 왜 vim에서 end를 누르면 F가 나오나요?
다음엔 이런 일이 일어날 거야
This is a text file,i will press "end key"
F
F
F
F
:(
답변1
해결책을 찾아라
# For some reason home and end keys are not mapping properly.
# Home key
imap <esc>OH <esc>0i
cmap <esc>OH <home>
nmap <esc>OH 0
# End key
nmap <esc>OF $
imap <esc>OF <esc>$a
cmap <esc>OF <end>
답변2
Solaris 10의 경우 xterm 또는 gnome-terminal을 실행 중일 수 있습니다. xterm의 경우 xterm 패치 #196과 약간 패치된 X11R6 xterm이 있습니다.
vim은 터미널 데이터베이스에서 터미널 정보를 가져옵니다. 이 xterm
정의에는 home/end 키 정의가 누락되어 있습니다. terminfo 형식은 다음과 같습니다.
# Reconstructed via infocmp from file: /usr/share/lib/terminfo/x/xterm
xterm|vs100|xterm terminal emulator,
am, km, mir, msgr, xenl,
cols#80, it#8, lines#65,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J,
cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\b,
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
ed=\E[J, el=\E[K, el1=\E[1K$<3>, enacs=\E(B\E)0,
home=\E[H, ht=\t, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
il=\E[%p1%dL, il1=\E[L, ind=\n, ka1=\EOq, ka3=\EOs,
kb2=\EOr, kbs=\b, kc1=\EOp, kc3=\EOn, kcub1=\EOD,
kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kent=\EOM,
kf0=\E[21~, kf1=\E[11~, kf10=\EOx, kf2=\E[12~,
kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~,
kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, rc=\E8, rev=\E[7m,
ri=\EM, rmacs=^O, rmkx=\E[?1l\E>, rmso=\E[m,
rmul=\E[m,
rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, rs2=@,
sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t^>
sgr0=\E[m, smacs=^N, smkx=\E[?1h\E=, smso=\E[7m,
smul=\E[4m, tbc=\E[3g,
터미널 설명에 home/end 키가 있는 경우 이러한 키는 다음과 같이 나열됩니다.khome
그리고kend
, 각각.
또한 초기화 문자열rs1
애플리케이션 모드 열기커서 키Home(여기에는 및 키가 있는 6키 편집 키보드가 포함될 수 있습니다 End.) 이로 인해 escapeO
접두사를 보내게 됩니다 .
vim은 터미널 데이터베이스에서 얻은 정보만 사용하기 때문에 이 정보에 대해 아무것도 모릅니다. 일련의 문자를 볼 때아니요터미널 데이터베이스에서는 한 번에 한 문자씩 해석하려고 시도합니다. 이 escape문자는 삽입 모드를 종료하지만 O
"켜지고"(삽입 시작) 키의 마지막 문자를 얻게 됩니다.H
또는F
. 이 키를 반복해서 누르면F
매번 누르십시오(이 키를 누르면 삽입 모드로 전환됩니다).
올바른 수정은 귀하의 매핑을 피하기 위해 터미널 설명을 수정하는 것입니다 .vimrc
.
infocmp >foo
vi foo
....adding this line (with a leading tab character):
khome=\EOH, kend=\EOF,
sudo tic foo
추가 자료:
- 왜 home/end 키를 사용할 수 없나요?(XTerm FAQ)
- PC 스타일 기능 키(XTerm 제어 순서)