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

时间:2019-04-17 14:09:44

标签: vim

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

背景: 我编写了一个函数,该函数在Vim首次启动时设置backupdirdirectoryundodir设置。我将设置设为首先在工作目录首先(位于USB记忆棒中)中查找相对路径,然后在{{1}中查找集中目录},如果有相对路径,我宁愿不使用集中目录。

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

研究:我检查了帮助文件(在~/vim/scratch_files/中),Vim Fandom页面和Stack Exchange,并搜索了解决方案,但找不到任何能使它起作用的东西工作。

示例:这是我所谈论的内容的最低限度工作示例。我的.vimrc中有一行,使用以下代码将文件(例如:help backupdir)添加到runtimepath变量:

scratchfiles.vim

应该(a)在子目录/ backup /,/ swap /和/ undo /中查找相对于当前工作目录 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() 的本地目录。然后,如果找不到,(b)在./_scratch/中寻找相同的子目录。然后,如果找不到,请使用./.scratch/

问题:

问题是,无论我输入这些设置有多少种不同类型的相对路径,Vim始终会选择一个集中目录。如何获得首先识别这些相对路径的信息?也许我格式化路径的方式有问题吗?

1 个答案:

答案 0 :(得分:1)

问题在于将这些设置放入ListView listView = new ListView(); ImageList imageList = new ImageList(); // add image to list: imageList.Images.Add("image_key", image_path); // give the listview the imagelist: listView.SmallImageList = imageList; // add item to listview: listView.Items.Add("item_text", "image_key"); 所调用的函数中-从上一个代码中删除第一行和最后两行之后,将识别本地目录并设置正确的相对路径。我相信与Vim处理autocmd的顺序有关。在查看vimrc中的原始设置后,它必须将它们解雇。

不要通过autocmd VimEnter * ...来设置backupdirundodirdirectory的底线,因为需要比调用VimEnter时更早地设置它们