Answers:
我最近爱上了Fuzzyfinder.vim ... :-)
:FuzzyFinderFile将让您通过键入部分名称或模式来打开文件。
我通常要做的是e .
(e-space-dot),它为我提供了一个可浏览的当前目录-然后我可以/
-搜索名称片段,就像在文本文件中找到一个单词一样。我发现总体上来说足够好,简单且快速。
:e.
)。
:e.
和之间的行为有所不同:E
:如果当前文件已被编辑但尚未保存,则前者会抱怨(如:edit
),因为“自从上次更改以来没有写过”,而后者会水平分割窗口(例如:new
)以允许打开新文件(如果未修改,则两者都将用新文件替换当前文件(如:edit
))。
:find
是另一种选择。
我从项目的根目录打开vim并将其path
放置在那里。
然后,我可以使用以下命令打开树中任意位置的文件:
:find **/filena< tab >
Tab将通过各种匹配自动完成。(**
告诉它通过路径进行递归搜索)。
:find
因为获取相对于工作目录的路径。在此处查看问题和@romainl答案:stackoverflow.com/questions/28224168/…。我发现了更多有趣的@strager答案,以便更轻松地获得相对于工作目录的路径。
您可以使用以下命令在当前路径中搜索文件**
:
:tabe **/header.h
如果有多个匹配项,请点击标签以查看各种补全。
:tabe **/*der.h
如果您不记得文件的全名,请使用类似的名称。
除非我缺少任何东西,否则:e filename是我找到的最快方法。
您也可以使用制表符自动完成文件名。
我喜欢设置中的:FuzzyFinderTextMate(或Ctrl+ F)。参见http://weblog.jamisbuck.org/2008/10/10/coming-home-to-vim
我在.vimrc文件中使用了几个快捷方式(下面的确切语法)。
它们基于以下事实:在90%的情况下,我想在与当前正在编辑的文件相同的目录中,或者在层次结构中与该编辑的文件非常接近的目录中打开另一个文件。
这是命令的作用:
,cd
:将当前工作目录更改为您正在编辑的当前文件所在的目录。
,e
:打开已填满,所以你必须指定当前工作目录中的文件只是文件名。
将它们放入您的.vimrc中:
map ,e :e <C-R>=expand("%:p:h") . "/" <CR>
map ,cd :cd %:p:h <CR>
这是一系列事件:
,cd
->当前工作目录现在变为“ / home / prog”,e
->扩展为“:e / home / prog”,这样您就可以填写文件名,例如test.h。,e
->扩展为“:e / home”tab
->循环浏览/ home的子目录enter
-> cd
到您要说的目录/ home / prog,e
->扩展为“:e / home / prog”我还发现其中最好的一个是Command-T(我已经尝试了所有的方法)。安装它是一个小麻烦,但是一旦安装,使用起来就是一个梦想。
如果要在公共目录中编辑文件:cd
,则可以转到该目录,然后使用:e
仅在文件名上使用。
例如,而不是:
:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:sp /big/long/path/that/takes/a/while/to/type/or/tab/complete/other_thingy.c
:vs /big/long/path/that/takes/a/while/to/type/or/tab/complete/one_more_thingy.java
你可以做:
:cd /big/long/path/that/takes/a/while/to/type/or/tab/complete/
:e thingy.rb
:sp other_thingy.c
:vs one_more_thingy.java
或者,如果您已经在所需目录中打开了文件,则可以使用%
当前文件名的简写形式,并使用:h
修饰符(:help :_%:
)将其修剪为当前目录:
:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:cd %:h
:sp other_thingy.c
:vs one_more_thingy.java
而且,就像其他人所说的那样,您可以在前行中用制表符填写文件名(:help cmdline-completion
有关更多信息,请参阅)。
这不完全是你要找的东西,但它的很多情况下好(虽然不是全部)。
如果您打开了VIM,并且缓冲区中有一个文件名,则可以将光标放在该文件名上并键入gf。这将打开名称位于同一缓冲区中光标下方的文件。和...一样
:e CTRL+r CTRL+w
:b oldname
我知道三个允许打开文件,支持自动完成并且不需要输入要打开的文件的完整路径名的插件(只要文件位于&path
vim选项的目录之一下)即可。 :
:e
/上:find
,而是在拆分操作上)最近,我看到了另一个具有类似功能的插件,但我不记得这个名字了。
很快,:find可能会支持自动完成-这些天来,有关该主题的补丁已在vim_dev邮件列表中流传。
提到了FuzzyFinder,但是我喜欢textmate像FuzzyFinderTextmate的行为插件的行为,该行为将行为扩展为包括所有子目录。
确保您使用的是Fuzzyfinder.vim的2.16版-较高的版本会破坏该插件。
在GVIM中,可以使用“打开/读取/写入”对话框浏览文件;
:browse {command}
{command}-打开/读/写
打开 -打开文件 读取 -追加文件 写入 -另存为对话框
我安装了FuzzyFinder。但是,限制是它只能在当前目录中查找文件。一种解决方法是添加FuzzyFinderTextmate。但是,基于文档和注释,这不能可靠地工作。您需要正确版本的FuzzyFinder,并且需要使用Ruby支持来编译Vim副本。
我现在正在尝试的另一种解决方法是在编辑会话开始时打开所有可能需要的文件。例如,打开关键目录中的所有文件...
:args app/**
:args config/**
:args test/**
etc...
(这意味着我可能会打开数十个文件,但是到目前为止,它似乎仍然可以正常工作。)
之后,我可以在缓冲模式下使用FuzzyFinder,它的作用有点像TextMate的command-o
快捷方式...
:FuzzyFinderBuffer
:tabe
将在新选项卡中打开文件,:new
将水平拆分窗口,并:edit
在打开新文件之前关闭当前文件。