如何使用Vim中的./relative路径将本地存储的backupdir和swap目录设置为工作目录?
摘要: 我正试图让Vim将备份文件、交换文件和撤消文件存储在相对于工作目录的目录中,以便我可以将这些文件与工作目录一起移动(例如在U盘上) 背景: 我编写了一个函数,用于在Vim首次启动时设置如何使用Vim中的./relative路径将本地存储的backupdir和swap目录设置为工作目录?,vim,Vim,摘要: 我正试图让Vim将备份文件、交换文件和撤消文件存储在相对于工作目录的目录中,以便我可以将这些文件与工作目录一起移动(例如在U盘上) 背景: 我编写了一个函数,用于在Vim首次启动时设置backupdir、目录、和undodir设置。我将设置为首先在工作目录中查找相对路径(位于U盘上),然后在~/vim/scratch\u files/中查找集中式目录,如果相对路径可用,我宁愿不使用该集中式目录 然而,无论我放置了什么相对路径,Vim都坚持使用集中式路径,无论是在Linux或Windows
backupdir
、目录
、和undodir
设置。我将设置为首先在工作目录中查找相对路径(位于U盘上),然后在~/vim/scratch\u files/
中查找集中式目录,如果相对路径可用,我宁愿不使用该集中式目录
然而,无论我放置了什么相对路径,Vim都坚持使用集中式路径,无论是在Linux或Windows Vim安装上进行测试
研究:我已经检查了帮助文件(在:help backupdir
中)、Vim Fandom页面和堆栈交换,并且已经搜索了解决方案,但找不到任何使其工作的方法
示例:这是我所说的一个最简单的示例。我在.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)针对子目录/backup/、/swap/和/undo/,查找相对于当前工作目录/\u scratch/
的本地目录。然后,如果没有找到,(b)在/.scratch/
中查找相同的子目录。如果找不到,请使用~/.vim/scratch\u files/
问题:
问题是,无论我为这些设置提供多少种不同类型的相对路径,Vim总是选择一个集中的目录。我如何让它首先识别这些相对路径?我格式化路径的方式可能有问题吗?问题是将这些设置放在由
autocmd vimcenter*.
调用的函数中--从以前的代码中删除第一行和最后两行后,将识别本地目录并设置正确的相对路径。我相信这与Vim处理autocmd的顺序有关。它必须在查看vimrc中的常规设置后关闭这些设置
底线不是通过
VimEnter
设置backupdir
、undodir
或directory
,因为这些需要在调用VimEnter
之前进行设置。目录/{uu,}scratch/{backup/,swap/,undo/}
是否存在<代码>vim不会创建它们,它将使用第一个存在的代码。还要验证vim
启动并加载文件以编辑选项后,选项的值是否正确::set backupdir?目录undodir?
谢谢您的提问。是的,它们确实存在于工作目录和所有子目录中,并且scratch目录都有相同的3个子目录,当我打开一堆文件并在同一目录中进行更改时,它们都是空的。在对所有3个设置执行:redir@a
然后设置[设置]?
后,这里有类似的输出,然后:redir END
:backupdir=.\\u scratch\backup/,.\.scratch\backup/,~\.vim\temp\dirs\backup/,,,,,,,,,,,,,,,,,,~\AppData\Local\temp,c:\tmp,c:\temp
目录=.\\u scratch\swap/,.\.scratch\swap/,,~\.vim\temp\dirs\dirs\swap/,~\.vim\temp\u dirs\undo/,.我认为backupdir
和undodir
不应该以/
结尾,只有目录
应该。vim在您的设置中使用了哪些目录?它使用最后一个目录~\.vim\scratch\u文件(在我之前的注释temp\u dirs中,但在本例中使用scratch文件)。你确定吗?因为它确实讨论了backupdir
和undodir
的帮助部分中的//,所以我使用了它。不过,我可以把它拿出来,看看它是否能解决问题。