【问题标题】:Make VIM to consider current folder the root使 VIM 将当前文件夹视为根目录
【发布时间】:2017-03-06 11:59:57
【问题描述】:

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

UPD:question 通常如何设置路径,但让/myfolder/ 指向我想要的某个文件夹并没有帮助。 /myfolder/ 始终是当前卷根的绝对路径。

【问题讨论】:

  • 只删除第一个/?
  • 还有另一个建议:在 root 中创建符号链接 :) 但是不,说真的,问题是如何让 VIM 考虑 / 不是卷的根目录,而是项目的根目录(或其他某些特定文件夹)。在开头删除斜线会破坏项目。
  • 是的,@TamásSzabó 发送了包含您答案的链接:将 set autochdir 添加到您的 vimrc。
  • @ThiagoMedeiros 情况并非如此。他在路径中的根不是文件系统根。他想将他的根设置为不同的根,即 Web 项目根。

标签: vim path editor


【解决方案1】:

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

我能想到的唯一解决方案是使用可视模式 gf。您可能知道,如果您在视觉上选择了文本并使用 gf 然后将考虑视觉选择,而不是'isf' 匹配。那么我们需要做的就是直观的选择下的文件名 光标排除可能的前导 /。这可以在地图中解决,如果 你不介意弄乱你之前的搜索:

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

这会覆盖您的 gf 以将搜索设置为光标下的文件名 (expand()),减去前导斜杠 (substitute()),然后运行 普通命令gn 选择匹配项,最后选择 原创gf

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

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

这是一个目录列表,当使用 gf[f]f^Wf:find:sfind:tabfind等 命令,前提是要搜索的文件具有相对 路径(不以“/”、“./”或“../”开头)。中的目录 'path' 选项可以是相对的或绝对的。

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

【讨论】:

  • 很高兴它成功了@AlexDolgov!如果您认为问题已解决,请不要忘记接受正确的答案;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 2021-12-05
  • 2015-11-11
  • 2021-07-03
相关资源
最近更新 更多