如何使用Vim中的./relative路径将本地存储的backupdir和swap目录设置为工作目录?

如何使用Vim中的./relative路径将本地存储的backupdir和swap目录设置为工作目录?,vim,Vim,摘要: 我正试图让Vim将备份文件、交换文件和撤消文件存储在相对于工作目录的目录中,以便我可以将这些文件与工作目录一起移动(例如在U盘上) 背景: 我编写了一个函数,用于在Vim首次启动时设置backupdir、目录、和undodir设置。我将设置为首先在工作目录中查找相对路径(位于U盘上),然后在~/vim/scratch\u files/中查找集中式目录,如果相对路径可用,我宁愿不使用该集中式目录 然而,无论我放置了什么相对路径,Vim都坚持使用集中式路径,无论是在Linux或Windows

摘要: 我正试图让Vim将备份文件、交换文件和撤消文件存储在相对于工作目录的目录中,以便我可以将这些文件与工作目录一起移动(例如在U盘上)

背景: 我编写了一个函数,用于在Vim首次启动时设置
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
的帮助部分中的//,所以我使用了它。不过,我可以把它拿出来,看看它是否能解决问题。