我正在.vimrc
中使用以下配置。 Ctrl + q
按键绑定需要2秒钟才能退出vim
。
" swap Escape and Caps Lock
au VimEnter * silent !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
au VimLeave * silent !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock'
" Ctrl + q to quit
nmap <c-q> :q<CR>
imap <c-q> <Esc>:q<CR>
如果从VimLeave
事件中删除了静音,则会显示以下消息(按Ctrl + q
时),并且2秒钟后vim将自动退出。
:!xmodmap -e 'clear Lock'-e 'keycode 0x42 = Caps_Lock
xmodmap: please release the following keys within 2 seconds:
(keysym ex71, keycode 24)
Control L (keysym Oxffe3, keycode 37)
但是,在上述配置下,手动运行命令(:q
,然后按Enter键)会立即退出vim
。
编辑:
默认键绑定shift + zz
也需要两秒钟。
$ nvim -version
> NVIM v0.3.4
答案 0 :(得分:1)
这似乎是X和xmodmap永久解决的问题,而不是vim。如果您搜索“请释放以下键”,您会发现很多人抱怨同一件事,没有解决办法,只是从诸如bashrc和vimrc之类的地方删除了xmodmap
命令。当以修改修饰符的方式运行xmodmap且按住任意修饰符时,它将以这种方式抱怨并延迟。这样做是因为只要按住修改器,对X服务器的基础请求 都会失败,并且它在重试之前等待您释放密钥。因此,这里没有简单的解决方案。想到的唯一解决方法是:
xmodmap
。VimLeave
命令中添加一个延迟,该延迟足够长,您可以将手指从按键上移开,但少于2秒。这样会减少一些不便,但不会消失。答案 1 :(得分:0)
我的解决方案是通过添加&
将命令放在后台。
这里是:
au VimEnter * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape' &
au VimLeave * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock' &
您仍然会在终端中看到消息,但是vim会立即退出。如果您不想这样做,请改用该消息:
au VimEnter * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape' 1>/dev/null 2>&1 &
au VimLeave * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock' 1>/dev/null 2>&1 &
它将xmodmap的标准输出和错误输出重定向到/dev/null
,因此将其丢弃并且将不会显示。
它在vim和neovim中都可以使用。