我想使用 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