Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux NeoVim通过ctrl+退出需要两秒钟;q键绑定_Linux_Vim_Neovim - Fatal编程技术网

Linux NeoVim通过ctrl+退出需要两秒钟;q键绑定

Linux NeoVim通过ctrl+退出需要两秒钟;q键绑定,linux,vim,neovim,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>

我正在
.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>
但是,对于上述配置,手动运行命令(
:q
并点击enter)立即退出
vim

编辑: 默认键绑定
shift+zz
也需要两秒钟

$ nvim -version
> NVIM v0.3.4

对于X和xmodmap,这似乎是一个永远无法解决的问题,而不是vim。如果你搜索“请释放以下键”,你会发现多年来人们一直在抱怨同样的事情,除了从bashrc和vimrc等地方删除
xmodmap
命令外,没有其他解决方案。当xmodmap以改变修改器的方式运行时,任何修改器都被按下,它将以这种方式抱怨和延迟。之所以这样做,是因为每当按下修改器时,对X服务器的底层请求就会失败,并且它会等待您在重试之前释放密钥。所以这里没有简单的解决方案。我想到的唯一解决办法是:

  • 忘记键的重新映射,不要在vim退出时运行
    xmodmap
  • 不要使用涉及修改器键的键绑定退出vim
  • (可能)在
    vimleeve
    命令中添加一个延迟,该延迟足够长,可以让手指离开按键,但不超过2秒。这将减少一点不便,但不会使它消失

我的解决方案是通过添加
&
将命令放在后台

这是:

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中都起作用。

所以它不是vim。每当您在按住修改键的情况下运行xmodmap时,xmodmap会生气并延迟两秒钟。您正在编写脚本使其在vim exit上运行,因此每当您使用包含修饰符的keybinding退出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 &