我想将我的映射CapsLock到Escape.我如何CapsLock代表.vimrc
?
我知道将空间映射到命令我会这样做:
:map <space> viw
我如何在不进行注册表破解的情况下映射CapsLock到Escape- 我正在寻找 Vim 命令?
如果没有黑客或其他软件就不可能实现这一点,我想将快捷方式分配jj给ESCin .vimrc
。我目前正在这样做:
inoremap jj <esc>
但是,如果我处于视觉模式,则这不起作用。我怎样才能jj模拟退出键?
答案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秒内自动反转。 ;-)
-希曼舒