developer tip

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

optionbox 2020. 10. 4. 10:55
반응형

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


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

map <Alt-D> <C-D>

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


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터미널 -> 환경 설정 -> 키보드


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

map <M-d> <C-d>

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


더 이상 "가능"한지 잘 모르겠습니다. 아래 업데이트를 읽으십시오.

예, 터미널 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>
    

작동 방식을 이해하면이 "트릭"을 다른 "이상한"조합으로 확장 할 수 있습니다. 예를 들어, 나는 흰개미를 사용하고 있고, vim은 인식하지 않습니다 . <S-F1>cat I get을 사용 ^[[1;2P합니다. 그런 다음 내 vimrc에서 다음을 수행합니다. execute "set <S-F1>=\e[1;2P", 그런 다음 무엇이든 매핑 할 수 있습니다.

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


업데이트 (2016 년 2 월)

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

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


Mac OSx의 Vim에서 Alt 키 매핑 :

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

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

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

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

map <Esc>[1;9D 

사용하다:

map <A-D> <C-D>

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


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


My Terminal would produce ^[x commands (e.g. for alt-x). What got it to work inside Vim was this small script from 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

Add to .vimrc to fix all alt key mappings.


Hello after no good solution after years of testing all the above on mac, I kept searching.

Here is my solution:

To create a combination keystroke including Alt you have to declare the combination in the preference > keyboard and use that combination in the vim setup file (check use option as meta key).

The output must be an unusual character (no a for example) so that you're not overriding a regular character.

In the example below you should be able to quite vim with ALT-Up.

vim setting: vim setting

mac setting: mac setting

참고URL : https://stackoverflow.com/questions/7501092/can-i-map-alt-key-in-vim

반응형