Vim에서 Escape 대신 CapsLock을 사용하는 방법은 무엇입니까?

Vim에서 Escape 대신 CapsLock을 사용하는 방법은 무엇입니까?

CapsLock내 것을 에 매핑하고 싶습니다 Escape. 어떻게 CapsLock표현 합니까 .vimrc?

나는 다음과 같이 명령에 공백을 매핑하는 방법을 알고 있습니다.

:map <space> viw

레지스트리 해킹을 하지 않고 내가 찾고 있는 Vim 명령 CapsLock에 매핑하려면 어떻게 해야 합니까 Escape?

해킹이나 다른 소프트웨어 없이는 이것이 불가능 하다면 jj. 나는 현재 이 일을 하고 있습니다:ESC.vimrc

inoremap jj <esc>

그러나 시각적 모드에서는 작동하지 않습니다. jjEsc 키를 어떻게 시뮬레이트할 수 있나요 ?

답변1

CapsLockVim 내에서는 지도를 작성할 수 없을 것 같습니다 . 다음을 사용하여 X 내에서 다시 매핑할 수 있습니다.setxkbmap:

setxkbmap -option caps:swapescape

콘솔에서 다시 매핑하려면 배포에서 사용 하는 systemd경우 사용자 정의 키보드 레이아웃을 사용할 수 있습니다./etc/vconsole.conf아치스 위키, 다른 초기화 시스템에 대해서는 참조이 U&L 답변.

답변2

과 을(를) 교환하는 대신 Caps Lock매핑 Escape하려면 다음을 사용하세요.Escape

setxkbmap -option caps:escape

바꾸다 ...:swapescape.

사용

setxkbmap -option

기존 옵션을 지우려면 위의 방법이 작동합니다.

답변3

xmodmapVim이 시작될 때 호출을 사용하여 Capslock을 Escape에 매핑 할 수 있습니다 . Vim을 떠난 후에는 변경 사항을 복원할 수 있습니다. 다음 줄을 다음 줄에 추가하세요 .vimrc.

au VimEnter * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
au VimLeave * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock'

그러나 Vim 세션이 여러 개인 경우 문제가 발생할 수 있습니다. 그 중 하나를 닫으면 xmodmap전역적으로 작동하므로 모든 수정 사항이 되돌려집니다.

답변4

~/.vimrc또는 파일에서 다음을 시도해 보세요 ~/.vim/vimrc.

:autocmd BufWinEnter * !setxkbmap -option caps:swapescape
:autocmd BufWinLeave * !setxkbmap -option

~/.bashrc첫 번째 줄이나 대신에 별칭을 사용할 수 있습니다 ~/.profile.

alias vim="setxkbmap -option caps:swapescape && vim"

이러한 방법의 단점은 vim을 닫지 않는 한 CapsLock이 Escape가 되고 그 반대의 경우도 마찬가지라는 것입니다.

해결책:

이를 위해 키 바인딩을 사용하여 원하는 모드(예: InsertMode) 중에만 시간 초과를 교환합니다.
au CursorHoldI * stopinsert
au InsertEnter * silent! let updaterestore=&updatetime | set updatetime=15000 | execute "!setxkbmap -option caps:swapescape" | redraw!
au InsertLeave * silent! let &updatetime=updaterestore | execute "!setxkbmap -option" | redraw!

이제 InsertMode 동안 CapsLock과 Escape는 시스템 전체에서 교환되지만 InsertMode의 시간 초과를 15000으로 설정했기 때문에 15초 동안 활동이 없으면 자동으로 반전되므로 걱정할 필요가 없습니다. ;-)

-히만슈

관련 정보