CapsLock내 것을 에 매핑하고 싶습니다 Escape. 어떻게 CapsLock표현 합니까 .vimrc
?
나는 다음과 같이 명령에 공백을 매핑하는 방법을 알고 있습니다.
:map <space> viw
레지스트리 해킹을 하지 않고 내가 찾고 있는 Vim 명령 CapsLock에 매핑하려면 어떻게 해야 합니까 Escape?
해킹이나 다른 소프트웨어 없이는 이것이 불가능 하다면 jj. 나는 현재 이 일을 하고 있습니다:ESC.vimrc
inoremap jj <esc>
그러나 시각적 모드에서는 작동하지 않습니다. jjEsc 키를 어떻게 시뮬레이트할 수 있나요 ?
답변1
답변2
과 을(를) 교환하는 대신 Caps Lock매핑 Escape하려면 다음을 사용하세요.Escape
setxkbmap -option caps:escape
바꾸다 ...:swapescape
.
사용
setxkbmap -option
기존 옵션을 지우려면 위의 방법이 작동합니다.
답변3
xmodmap
Vim이 시작될 때 호출을 사용하여 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초 동안 활동이 없으면 자동으로 반전되므로 걱정할 필요가 없습니다. ;-)
-히만슈