摘要:我正在尝试让Vim将备份文件、交换文件和undo文件存储在相对于工作目录的目录中,这样我就可以将这些文件与工作目录一起移动(例如在U盘上)。
背景: Vim我写了一个函数,用于在首次启动时设置backupdir
、directory
和undodir
设置。我将设置为最初在工作目录first (应该在U盘上)中查找相对路径,然后在~/vim/scratch_files/
中查找集中式目录,如果有相对路径可用,则不愿使用该集中式目录。
但是,无论我放置的是什么相对路径,Vim都坚持使用集中式路径,无论是在Linux还是Windows Vim安装上进行测试。
研究:我已经检查了帮助文件(:help backupdir
格式)、Vim粉丝页面和Stack Exchange,并搜索了解决方案,但没有找到任何可以让它工作的东西。
例子:这里的是我所说的一个最小工作的例子。我的.vimrc中有一行代码,它将一个文件添加到runtimepath变量中,例如scratchfiles.vim
,代码如下:
function! SetLocalScratchFiles()
" Turn the settings on
set backup
set writebackup
set swapfile
if has("win32") || has("win64")
" The // gets replaced with a %-substituted path for a filename in the destination scratch file in Windows as per :h backupdir (i.e., C%%path%to%file.txt.swp)
set backupdir^=.\\_scratch\\backup//,.\\.scratch\\backup//,$HOME\\.vim\\scratch_files\\backup//,.
set directory^=.\\_scratch\\swap//,.\\.scratch\\swap//,$HOME\\.vim\\scratch_files\\swap//,.
else
set backupdir^=./_scratch/backup//,./.scratch/backup//,~/.vim/scratch_files/backup//,.
set directory^=./_scratch/swap//,./.scratch/swap//,~/.vim/scratch_files/swap//,.
endif
" Undo Directory:
if has('persistent_undo')
if has("win32") || has("win64")
set undodir^=.\\_scratch\\undo//,.\\.scratch\\undo//,$HOME\\.vim\\scratch_files\\undo//,.
else
set undodir^=./_scratch/undo//,./.scratch/undo//,~/.vim/scratch_files/undo//,.
endif
set undofile
endif
endfunction
autocmd VimEnter * call SetLocalScratchFiles()
它应该(a)查找相对于当前工作目录./_scratch/
的本地目录,以找到子目录/backup/、/swap/和/undo/。然后,如果没有找到,(b)在./.scratch/
中查找相同的子目录。如果找不到,请使用~/.vim/scratch_files/
。
问题:
问题是,无论我向这些设置提供多少不同类型的相对路径,Vim总是选择一个集中的目录。我怎么才能让首先识别这些相对路径呢??可能是我格式化路径的方式有问题吗?
发布于 2019-04-18 09:18:41
问题是将这些设置放在由autocmd VimEnter * ...
调用的函数中--在从前面的代码中删除第一行和最后两行之后,可以识别本地目录并设置正确的相对路径。我相信这与Vim处理autocmd的顺序有关,它必须在查看vimrc中的普通设置后才能启动autocmd。
底线是不要通过VimEnter
设置backupdir
、undodir
或directory
,因为它们需要比调用VimEnter
时更早设置。
https://stackoverflow.com/questions/55729538
复制相似问题