Alt 키를 매핑하는 방법?


37

Alt다음과 같은 방법으로 키 를 매핑하려고합니다 .

:map <A-j> j
:map <A-k> k

그러나 작동하지 않습니다 (종소리가 울렸다 Alt + j/ Alt + k).

내가 뭘 놓친거야?

OSX에서 터미널을 사용하고 있으며 원격 Linux에서도 마찬가지입니다.


Ctrl + v, Alt + j나는이있어 : ?~H~F( encoding=utf-8).

Ctrl + v, Alt + k나는이있어 : ?~Z( ˚encoding=utf-8).

플러그인 ( -u NONE) 없이 vim을 실행 해도 아무런 차이가 없습니다.


1
합니까 Alt(보도, 보류 상태가 아님) 한 후 j사용할 수 있습니까? 로 xterm적어도 내가 설정해야 metaSendsEscapetrue ... 일 이러한 시퀀스를 얻기 위해 같은 문제가 있다면 ... 나도 몰라, 내가 테스트 할 수 없습니다 그래서 나는 OSX를 사용하지 않는
마틴 Tournoij

@Carpetsmoker Alt, 놓기 j또는 다른 키 를 누르면 정상적으로 작동합니다. '옵션을 메타 키로 사용' 옵션을 확인하고 활성화하여 활성화했습니다. 그래서 설정 metaSendsEscape은 트릭을했습니다. 감사합니다.
kenorb

3
이 질문은 이전에 (더 나은 답변으로) 답변되었습니다 : stackoverflow.com/questions/6778961/…
user3751385

답변:


35

Linux 또는 Cygwin에서 수행하는 방법입니다.

먼저 ALT+ 를 누를 때 터미널에서 어떤 문자를 보낼지 확인하십시오 J.

이렇게하려면 콘솔로 이동하여 실행하십시오 sed -n l(사용할 수도 있습니다 cat). 그런 다음 ALT+를 누르면 J화면의 문자가 ^[j입니다.

로 교체 ^[하고 \e(누르면 터미널에서 전송 한 것이기 때문에 esc) 마지막 문자열은 \ej입니다.

그런 다음 내 글에 씁니다 .vimrc.

execute "set <M-j>=\ej"
nnoremap <M-j> j

그리고 매핑이 작동합니다.


4
:set <M-j>=\ej부품에 대한 설명서를 찾을 수 없습니다 . 무엇을 검색해야합니까?
Evgeni Sergeev 2016 년

1
답변 주셔서 감사합니다, 이것은 Iterm + vim / 나를 위해 일한 유일한 솔루션이었습니다
newUserName 여기

아뇨, 작동하지 않습니다. 때로는 ESC-J는 ALT-J 역할을합니다
user3751385

1
@EvgeniSergeev 참조:help :set-termcap
Rich

9

Carpetsmoker의 도움으로 터미널이 'Alt / 옵션을 메타 키로 사용'하도록 구성되지 않은 것 같습니다 (GUI 터미널에서 특히 일반적 임).

OSX의 터미널의 경우 환경 설정-> 설정-> 키보드 탭-> '옵션을 메타 키로 사용'에 있습니다. 확인 : 옵션을 메타 키로 사용하도록 터미널을 어떻게 변경할 수 있습니까? ( 매버릭스 ).

XTerm의 경우 다음을 확인하십시오. XTerm을 기본값으로 메타 전송 이스케이프로 구성 하십시오 .

개인 .Xdefaults 파일 ( ~/.Xdefaults)의 아무 곳에 나이 행을 추가하십시오 .

xterm*metaSendsEscape: true

그런 다음 xrdb를 사용하여 구성을 다시로드하십시오. 이 단계를 수행하지 않으면 .Xdefaults다음에 X를 다시 시작할 때까지 변경 사항 이 적용되지 않습니다.

xrdb -l ~/.Xdefaults

그런 다음 Alt키와 같은 표준 매핑 :

:map <A-j> j
:map <A-k> k

잘 작동합니다.

도움이 필요하면 다음을 참조하십시오 :h :map-alt-keys..


4
:h :map-alt-keys또 다른 정보원 으로보고 싶을 수도 있습니다
Peter Rincker

4

Kossak의 답변과 비슷하지만 리터럴 키 누름을 매핑하여 조금 더 간단합니다.

을 누른 후 일반 모드이거나을 (를) :삽입 한 후 .vimrc매핑을 시작하여 입력을 직접 매핑하십시오.

nnoremap 

다음 타격 Ctrl+ V다음 기록 예에 키 Alt+를 . 이것은 다음과 같이 표시됩니다 :

nnoremap ^[[1;3D

그러나 각각 ^[은 하나의 리터럴 이스케이프 문자이며 구문 강조 표시로 이것을 보여야합니다. 리터럴 이스케이프를 text <Esc>로 바꾸고 사용하려는 명령을 추가하십시오.

nnoremap <Esc>[1;3D <C-w>h

OP는 Alt+ 문자 매핑이라는 것을 알고 있지만 기본적으로 매핑되지 않을 수있는 작업에 화살표를 사용하여 표시하는 방법을 보여줍니다.


고마워요, 고마워요!
아린 딘

2

이것은 우분투 16.04 xfce 터미널 (및 금욕 녹 터미널)에서 작동합니다.

ultisnip 스 니펫 트리거를 Meta-/(emacs 스 니펫과 동일하게)

let g:UltiSnipsExpandTrigger="^[/"

여기 ^[/에 vim을 입력합니다

삽입 모드에서 Ctrl-V Alt-/

( 내 PC 키보드 MetaAlt키입니다)


1

경우 Control+V다음 ALT-x^[x당신의이 작은 스크립트를 사용하여 문제를 해결할 수 있습니다 (터미널에서 입력) vim.wikia.com :

for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

모든 대체 키 매핑을 위해 .vimrc에 추가하십시오.

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