NeoVim需要两秒钟通过Ctrl + Q键绑定退出

时间:2019-04-23 23:41:51

标签: linux vim neovim

我正在.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

2 个答案:

答案 0 :(得分:1)

这似乎是X和xmodmap永久解决的问题,而不是vim。如果您搜索“请释放以下键”,您会发现很多人抱怨同一件事,没有解决办法,只是从诸如bashrc和vimrc之类的地方删除了xmodmap命令。当以修改修饰符的方式运行xmodmap且按住任意修饰符时,它将以这种方式抱怨并延迟。这样做是因为只要按住修改器,对X服务器的基础请求 都会失败,并且它在重试之前等待您释放密钥。因此,这里没有简单的解决方案。想到的唯一解决方法是:

  • 忘记密钥重新映射,不要在vim出口上运行xmodmap
  • 不要使用涉及修饰键的键绑定退出vim。
  • (也许)在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中都可以使用。