首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Vim中的./相对路径将本地存储的backupdir和交换目录设置为工作目录?

如何使用Vim中的./相对路径将本地存储的backupdir和交换目录设置为工作目录?
EN

Stack Overflow用户
提问于 2019-04-17 22:09:44
回答 1查看 418关注 0票数 1

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

背景: Vim我写了一个函数,用于在首次启动时设置backupdirdirectoryundodir设置。我将设置为最初在工作目录first (应该在U盘上)中查找相对路径,然后在~/vim/scratch_files/中查找集中式目录,如果有相对路径可用,则不愿使用该集中式目录。

但是,无论我放置的是什么相对路径,Vim都坚持使用集中式路径,无论是在Linux还是Windows Vim安装上进行测试。

研究:我已经检查了帮助文件(:help backupdir格式)、Vim粉丝页面和Stack Exchange,并搜索了解决方案,但没有找到任何可以让它工作的东西。

例子:这里的是我所说的一个最小工作的例子。我的.vimrc中有一行代码,它将一个文件添加到runtimepath变量中,例如scratchfiles.vim,代码如下:

代码语言:javascript
复制
    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总是选择一个集中的目录。我怎么才能让首先识别这些相对路径呢??可能是我格式化路径的方式有问题吗?

EN

回答 1

Stack Overflow用户

发布于 2019-04-18 09:18:41

问题是将这些设置放在由autocmd VimEnter * ...调用的函数中--在从前面的代码中删除第一行和最后两行之后,可以识别本地目录并设置正确的相对路径。我相信这与Vim处理autocmd的顺序有关,它必须在查看vimrc中的普通设置后才能启动autocmd。

底线是不要通过VimEnter设置backupdirundodirdirectory,因为它们需要比调用VimEnter时更早设置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55729538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档