Vim:简单的“跳转到文件”命令?

9
“跳转到源代码树中某个文件的最简单方法是什么?”例如,如果我正在使用包含libfoo/foo/foo.py的“libfoo”,我想能够从任何位置在libfoo/**[0]内跳转到foo.py
可能可以使用标签文件来实现这个功能吗?
[0]: 即libfoo/及其子目录。
7个回答

19

** 加入你的逗号分隔的 vim path 变量(而不是系统路径),如果你在项目的某个父目录中,请使用以下命令:

:find foo.py

2
我投了你一票,因为使用“find”命令肯定比安装和配置插件简单。 - Matt Briggs
":set path" 是什么意思?我的路径是 path=.,**,,,我认为这是默认值。对于我来说它肯定会递归查找。在 / find /etc/passwd 中查找密码,请使用 ":find password in" 命令。 - Ry4an Brase
看起来我的~/.vimrc文件中有set path=.,**,,,这是我10年前从某个地方抄袭的。添加这个设置后:find就可以递归查找了。 - Ry4an Brase
啊,问题就在这里:我的“path”缺少“”。不过很奇怪——我正在运行一个大部分是标准的7.2版本,如果“”是默认的话,那么我不知道为什么我没有它(我的是“.,/usr/include,,”)。 - David Wolever
我想这就是多年来一直使用相同的vimrc文件的问题——你会忘记默认设置。已更新答案。 - Ry4an Brase
显示剩余2条评论

7
检查command-tFuzzyFinderFuzzyFinder_Textmate。个人认为,command-t具有最佳UI,但对于快速进入非常大的项目中的正确位置,FuF_Textmate是最好的选择(这就是我尝试所有三项后使用它的原因)。请注意,fuzzyfinder_textmate由其原始作者未维护,因此您可能需要在gh网络选项卡中查找谁拥有最新的分支。还要注意,安装有点棘手。

我已经在使用FuzzyFinder_Textmate进行标签跳转了...但是使用file有点烦人,因为如果我在libfoo/bar/baz/中,那么我就必须输入\f../../../**/foo.py - David Wolever
可能有一些设置方法,使其默认使用某个目录作为根目录? - David Wolever
据我所知,FuzzyFinder_TextMate 只能匹配文件名,并且始终从您打开 Vim 的位置开始(有时实际上可能会很麻烦)。也许你正在使用 FuzzyFinder? - Matt Briggs
嗯,也许我只是在使用FuzzyFinder。 - David Wolever
两者的主要区别在于对于fuf,您必须遍历整个路径(即l/f/fpy),而对于fuf_tm,它只会根据文件名进行匹配,而不是完整路径,直到您开始使用/s。因此,fpy将匹配它,但如果太普遍,您可以使用foo/fpy来缩小搜索范围。 - Matt Briggs
CtrlP 是列表中的另一个选项。与其他答案中的类似,但是它是纯粹的 vimscript。 - idbrii

3
您可以结合Vim的文件名标签补全功能和**递归目录扩展。例如,输入::e libfoo/**/foo.py,然后按TAB键。这将从libfoo目录向下搜索匹配的文件。如果有多个匹配项,您可以使用TAB键循环浏览它们。找到所需的文件后,按Enter键完成命令并编辑文件。
要了解更多关于 ** 匹配的信息,请输入:h starstar. 它需要使用 +path_extra选项编译的Vim版本。
如果您已经编辑过该文件,则还可以使用:b name命令在缓冲区中搜索部分名称匹配项。例如,:b foo.py<TAB>将扩展为缓冲区名称,其中包含“foo.py”任何位置的文件。请注意,它匹配整个路径,因此:b foo<TAB>将匹配所有来自libfoo目录的文件。

因为它简单且符合问题要求,而且只使用了内置的vim功能,所以被顶起来。 - senecaur

1

ctags --extra=f . 会创建与文件名相同的标签,指向文件的第一行:

ctags -R --extra=f .

那么你只需要执行以下操作:

:tag file_na

并且可以通过tab键进行自动补全。

参考链接:Vim和ctags:标记文件名


0

ctrlp.vim

CtrlP是一个针对Vim的全路径模糊文件、缓冲区、最近使用的文件、标签等查找器。

  • 纯Vimscript编写,支持MacVim、gVim和Vim 7.0+。
  • 完全支持Vim正则表达式作为搜索模式。
  • 内置最近使用(MRU)文件监控。
  • 内置项目根目录查找器。
  • 可同时打开多个文件。
  • 可创建新文件和目录。
  • 可扩展。

您可以在https://github.com/ctrlpvim/ctrlp.vim找到它。


0

看看这个:

https://github.com/zhchang/quick_file

独特的功能: 1. 只要它在一个子目录中,你不需要知道它确切的位置 2. 你不必记住完整的名称,碎片就可以 3. 它会匹配最浅的路径,但如果提供更多的路径碎片,它将匹配更深。


-1
map <S-F12> :execute "!start explorer \"" . expand( "%:p:h" ) . "\""<CR>

在使用的文件目录中启动资源管理器窗口


抱歉,我不确定我看到这与问题有什么关系... - David Wolever

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接