使 VIM 将当前文件夹视为根目录

Make VIM to consider current folder the root

我已经知道如何退出 Vim,现在我想知道是否可以强制 Vim 在当前目录中搜索 '/somedir/file.js' 按 gf,好像是'./somedir/file.js'?

UPD:question 一般如何设置路径,但它无助于使 /myfolder/ 指向我想要的某个特定文件夹。 /myfolder/ 始终是当前卷根目录的绝对路径。

Vim 始终将以 / 开头的文件名计为文件系统根目录,因为 你观察到。如果不是这种情况,if 'isf'(选项 控制什么被认为是文件名)接受了一个正则表达式,这将是 更容易解决。但是,如果您从 'isf' 中删除 /,则没有斜杠 不再被视为文件名的一部分。

我能想到的唯一解决办法是使用可视模式 gf。您可能知道,如果您对文本 select 进行可视化编辑并使用 gf 然后将考虑视觉 selection,而不是 'isf' 比赛。那么我们需要做的就是可视化select下的文件名 游标不包括可能的前导 /。这可以在地图中解决,如果 你不介意弄乱你之前的搜索:

nnoremap <silent> gf :let @/ = substitute(expand('<cfile>'), '^/', '', '')
                   \  <bar>normal gngf<cr>

这会覆盖您的 gf 以将搜索设置为光标下的文件名 (expand()),减去前导斜线(如果有)(substitute()),然后是 运行 正常命令 gn 其中 select 是匹配项,最后是 原创 gf.

如果你想保存你之前的搜索和恢复,你可以很容易地 创建一个函数来包装这一切。注意我也写了这是两个 只是因为我是排长队的公敌。但如果你只是 想测试它删除 \ 并写在一行中。

现在您的 gf 会将 /file 解释为 file。因此,如果你在 正确的目录这将起作用。如果您需要在不同的地方搜索 目录,您要查找的选项是 'path',或 'pa' 短的。您可以给出要搜索的目录列表。很像 Unix shell 的 $PATH。被逗号隔开。从帮助(一定要阅读 休息一下,:h 'pa):

This is a list of directories which will be searched when using the gf, [f, ]f, ^Wf, :find, :sfind, :tabfind and other commands, provided that the file being searched for has a relative path (not starting with "/", "./" or "../"). The directories in the 'path' option may be relative or absolute.

总之,要在您的项目中使用它,请根据需要设置 'path' 如您所愿并启用此地图。或者 运行 全部自动在一个 :autocmd 或类似的东西。你没有改变的根 按照你最初的建议进行项目,但你有点模仿这个 在 'path' 中包含所需的目录,然后强制 gf 忽略前导 /.