当我使用 neovim 作为 MANPAGER 并且使用非默认交换目录时,如何修复“E302:无法重命名交换文件”?

当我使用 neovim 作为 MANPAGER 并且使用非默认交换目录时,如何修复“E302:无法重命名交换文件”?

我想使用 neovim 查看手册页。为此,我在文件中进行了以下设置.bashrc

export MANPAGER='nvim +Man!'

在我的 MacOS 系统上,这不会给我带来任何问题。但在我的 Linux 系统上,打开手册页最终会出现在 neovim 中,但在启动每个手册页时,都会出现以下烦人的消息,持续大约一两秒钟:

Error detected while processing function man#init_pager:
line   20:                                                                                                                                                                                                                                                                                    
E302: Could not rename swap file

我发现这与放入交换文件有关,~/.vim/swap因为我更喜欢它们在那里而不是污染我的工作树:

" Where to store swap files.  By default, they will go into ~/.vim/swap, but                                    
" if that doesn't work, they will go in cwd.                                    
set directory=~/.vim/swap,.                                     

我只在 neovim 中看到这个问题,在 vim 中没有看到。

有没有办法让这两个设置(使用 neovim 作为我的 MANPAGER 并设置备用交换位置)一起工作?


如果有帮助的话,可以像这样以最少的方式重现:

docker pull ubuntu
docker run -it --name test_nvim_manpager ubuntu /bin/bash

apt update
apt install -y neovim man
unminimize

mkdir -p ~/.config/nvim
echo 'source ~/.vimrc' > ~/.config/nvim/init.vim

echo "export MANPAGER='nvim +Man\!'" >> ~/.bashrc
echo "set directory=~/.vim/swap,." >> ~/.vimrc
source ~/.bashrc

man ls

更新:现在我的 Mac 运行 vim 时也会出现这种情况v0.7.2。我怀疑这是由于 vim 升级导致的,但我现在不确定是从哪个版本开始的。

答案1

万一对其他人有帮助,我注意到当 vim 用作 MANPAGER 时,文件名以 开头man://。考虑到这一点,我通过将指令包装在~/.vimrc文件中的条件中来避免切换手册页的交换文件位置:

" Changing the swap directory for the MANPAGER causes a "E302: Could not                                       
" rename swap file" error. Therefore do not change the swap directory for                                          
" man pages.   
if stridx(@%, 'man://') >= 0                                                                                      
  " Where to store swap files.  By default, they will go into ~/.vim/swap, but                                     
  " if that doesn't work, they will go in cwd.                                                             
  set directory=~/.vim/swap,.                                                                                      
endif                                                                                                      
                                                                                                                   

相关内容