摘要: 我试图让Vim在相对于工作目录的目录中存储备份文件,交换文件和撤消文件,以便可以将这些文件与工作目录一起移动(例如,在USB记忆棒上)。
背景:
我编写了一个函数,该函数在Vim首次启动时设置backupdir
,directory
和undodir
设置。我将设置设为首先在工作目录首先(位于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始终会选择一个集中目录。如何获得首先识别这些相对路径的信息?也许我格式化路径的方式有问题吗?
答案 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 * ...
来设置backupdir
,undodir
或directory
的底线,因为需要比调用VimEnter
时更早地设置它们