Vim에서 Alt 키를 매핑 할 수 있습니까?


90

.vimrc에 아래 줄을 추가하여 매핑하려고했지만 작동하지 않습니다. .vimrc가 Vim에 의해로드되었는지 확인했습니다.

map <Alt-D> <C-D>

이 매핑에 오류가 있습니까?


터미널에서 vim을 사용하고 있습니까, 아니면 GUI 버전 (gvim, macvim)을 사용하고 있습니까?
Nick Knowlson 2011 년

또한 encoding매핑이 실행 된 후 변경 사항이 있으면 Alt 키에서 얻은 내용이 처음 설정 한 내용과 일치하지 않을 수 있습니다.
dash-tom-bang

답변:


136

Mac 사용자에게 : ALT + hjkl 매핑을 위해 생성 된 실제 문자를 대신 사용합니다 (INSERT 모드에서 조합을 사용하여 어떤 문자를 사용하는지 확인). 예를 들어 키보드로 다음을 얻습니다.

<ALT+j> ==> ª
<ALT+k> ==> º

등등. 여기 StackOverflow 에서 솔루션을 찾았 습니다 .

나는 이것을 사용하여 .vimrc에서 이것을 사용하여 ALT + k \ j로 줄을 위아래로 이동했습니다.

nnoremap ª :m .+1<CR>==
nnoremap º :m .-2<CR>==

inoremap ª <Esc>:m .+1<CR>==gi
inoremap º <Esc>:m .-2<CR>==gi

vnoremap ª :m '>+1<CR>gv=gv
vnoremap º :m '<-2<CR>gv=gv

여기에 설명 된대로 .

유용하길 바라며 Vim을 즐기세요 :)

부 칙 BY Dylan_Larkin (2019) : 맥 "에이 작업을 수행하려면 메타 키로 사용할 옵션은 "켜져 있어야 OFF터미널 -> 환경 설정 -> 키보드


10
이것은 내가 여기에 온 것입니다 (분할을 이동하려면 Alt + HJKL)! 감사!
Jamie Schembri 2013 년

6
어떤 문자인지 알아내는 쉬운 방법은를 사용하는 것 cat입니다. cat고양이 창 안에 원하는 키 조합을 입력하기 만하면 됩니다. 내 Mac에서 alt + 대괄호가 '및 "임을 알았습니다.
dvcrn

4
이것은 분할 사이를 이동하기 위해 Alt + HJKL로 훌륭하게 작동합니다. nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
John Morales 2014

3
이러한 정확한 매핑은 향후 OSX 버전에서 예상대로 작동하지 않을 수 있습니다. sed -n l매핑을 구성하기 전에 <Ak> 및 <Aj>의 출력을 보려면 사용 하십시오. 내 경우에는 <에이>는 와 <AK로는>이다˚
luk3thomas

4
macOS에서 설정시 Use Option as Meta Key또는 iTerm 프로필 ⌥ key to Esc+은 기존 방식 (Linux / Unix에서와 같이)처럼 작동합니다. 따라서 Vim에서지도를으로 설정할 필요가 없습니다 <^[j>. 그냥 <A+j>또는에 매핑 <M+j>하면 작동합니다.
goetzc

40

:help key-notation서로 다른 키를 매핑하는 데 사용해야하는 형식을 설명합니다. alt의 경우 <A-또는을 사용할 수 있습니다 <M-. 그래서 당신의 매핑은

map <M-d> <C-d>

또한 매핑에 대해 오른쪽을 다시 평가하도록 명시 적으로 허용하지 않는 한 (예 nore:)의 변형을 사용하는 것이 좋습니다 .:mapnoremap


1
이것은 여전히 ​​효과가 없습니다. Alt + D 입력은 여전히 ​​Vim에 이상한 문자를 입력합니다.
Thomson

9
그것은 별도의 문제입니다. 터미널에서 멀티 바이트 문자를 Vim에 보내고 Vim은이를 <A-d>. 당신은 아마 전송 귀하의 터미널의 설정을 변경해야합니다 <A-d>으로 <Esc>d.
jamessan

1
@jamessan iterm2에서 수행하는 방법?
Finn

33

더 이상 "가능"하다는 확신이 없습니다. 아래 업데이트를 읽으십시오.

예, 터미널 vim에서도 할 수 있지만 실제로 모든 답을 잡아낼 수는 없습니다 . 기본적으로 두 단계를 따라야합니다.

  1. <M-d>표기법이 있는지 확인하고 터미널에서 입력 한 내용을 정확히 매핑합니다 ( ^[이스케이프 문자).

    $ cat
    ^[d
    $
    
    " in your .vimrc
    execute "set <M-d>=\ed"
    " you have to use double quotes!
    
  2. 새로 "생성 된"조합에 무언가를 매핑합니다.

    noremap <M-d> :echo "m-d works!"<cr>
    

작동 방식을 이해하면이 "속임수"를 다른 "이상한"조합으로 확장 할 수 있습니다. 예를 들어, I 'm using termite, and vim does n't know <S-F1>, using cat I get ^[[1;2P. 그런 다음 내 vimrc에서 다음을 수행합니다. execute "set <S-F1>=\e[1;2P", 그런 다음 무엇이든 매핑 할 수 있습니다.

참고 : 이유는 모르겠지만 일부 사람들 \<Esc>\e.


업데이트 (2016 년 2 월)

터미널이 실행하는 terminfo에 따라 아마도 ... 대부분의 터미널에서 "alt + h"는 ^[h 는 "escape + h"에 . 따라서 키를 덮어 쓸 수 있습니다. 방금 (다시) 시도했지만 작동하는 것 같지만 버그가 많고 오류가 발생하기 쉬운 구현이라고 생각합니다.

그럼에도 불구하고 충분히 용감하게 여기 실험용 플러그인이 있습니다.


execute "set...물건 대신 set <M-d>=^[d. 는 ^[실제로 사용하여 입력 이스케이프 문자입니다 C-v-Esc. 이것은 rxvt / urxvt에서 필요했지만 xterm은 특별한 처리가 필요하지 않습니다. 이 주제에 대한 자세한 정보는 vim wiki를 참조하십시오 .
Micah Elliott

tmux와 함께 작동하여 Md가 바인딩 될 수있는 유사한 접근 방식이 있습니까?
George

2
나를 위해, <Esc>다음, d지금과 같은 일을 수행 <Alt>+를 d. 또한, 당신은 단지 하나 개의 라인에서이 작업을 수행 할 수 있습니다 Ctrl-v, <Esc>따라 여기에 .
Sparhawk

24

Mac OSx의 Vim에서 Alt 키 매핑 :

터미널이 vim으로 보내는 키 코드를 확인하여 시작하십시오.

$ sed -n l
^[[1;9D 

위의 예에서 명령을 실행하고를 눌렀습니다 Alt + Left.

^[[1;9D그래서 우리가 할 수있는, 사용자 정력로 전송되는 이스케이프 순서입니다 우리의 매핑.

map <Esc>[1;9D 

3
iTerm2 앱을 사용하는 경우 프로필> 키에서 키가 매핑되는 방식을 확인하는 것이 좋습니다.
fikovnik

1
iTerm2에서 와 같이 구성된 왼쪽 Option키 ( )를 사용하면 vim을 종료하도록 Esc+매핑 alt+q할 수 있습니다 . nnoremap <silent> <Esc>q :qa!<cr>
ryenus

환경 설정> 프로필로 이동하여 현재 프로필을 선택하고 해당 프로필의 "키"탭으로 이동 한 다음 "왼쪽 ⌥ 키"옵션을 "Esc +"(사용 가능)로 변경하면 해당 리맵과 함께 작동하도록 iTerm2를 설정할 수도 있습니다. 옵션은 "Normal", "Meta"및 "Esc +"입니다.
Giovanni Benussi

12

사용하다:

map <A-D> <C-D>

을 참조하십시오 :help key-notation.


1
여전히 작동하지 않는 것 같습니다. Alt + d는 비 매핑 케이스와 동일한 이상한 문자를 Vim에 입력합니다.
Thomson

나를 위해 작동 ( gvimWindows에서 사용)
Deqing

8

터미널이 Alt-D를 "올바르게"전송하지 못할 수 있습니다. CV를 사용하여 실제로 Vim으로 전송되는 실제 이스케이프 시퀀스를 가져 와서 매핑을 만들 수 있습니다. 즉, .vimrc를 편집하고 다음 시퀀스 "CV Alt-D"를 입력하여 실제 파일을 바꾸면 vimrc에서 올바른 이스케이프 시퀀스를 갖게됩니다. 터미널이 vim에 아무것도 보내지 않으면 작동하지 않습니다.


8

내 터미널은 ^[x명령 을 생성 합니다 (예 : alt-x). Vim에서 작동하게 된 것은 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

모든 alt 키 매핑을 수정하려면 .vimrc에 추가하십시오.


1

Mac 사용자에 대한 Bruno의 답변에 대한 후속 조치로 옵션 키가에 매핑되어 있는지 확인하십시오 Esc+.

이것은 AVim에서 옵션 ( ) 키 의 "정상적인"동작을 제공합니다 .

예를 들어 iterm2에서이 옵션은 다음 위치에서 찾을 수 있습니다 Preferences > Profiles > Keys.

iterm2 환경 설정 스크린 샷


또한 구성을 다음 nnoremap <Esc>j :m .+1<CR>==과 유사 하게 변경해야했습니다 ...
mihaipopescu

0

안녕하세요, Mac에서 위의 모든 사항을 수년간 테스트 한 후에도 좋은 해결책이 없는데도 계속 검색했습니다.

내 해결책은 다음과 같습니다.

Alt를 포함한 조합 키 입력을 만들려면 환경 설정> 키보드에서 조합을 선언하고 vim 설정 파일에서 해당 조합을 사용해야합니다 (메타 키로 옵션 사용 선택).

출력은 a일반 문자를 대체하지 않도록 비정상적인 문자 ( 예 : 아니오) 여야합니다 .

아래 예제에서 ALT-Up으로 꽤 vim 할 수 있어야합니다.

정력 설정 : 정력 설정

맥 설정 : 맥 설정

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