在Vim中打开文件的快捷方式


123

我想使用Ctrl+ Shift+ R或通过Ctrl+ 在Vim中像在Eclipse中那样打开文件N自动填充选项。调用键盘快捷键,键入文件名/模式,然后从所有匹配的文件名中进行选择。

我知道通常像这样打开它:

:tabe <filepath>
:new <filepath>
:edit <filepath>

这里的问题是在这种情况下,我必须指定整个文件路径。


1
请注意,建议的命令具有不同的效果,:tabe将在新选项卡中打开文件,:new将水平拆分窗口,并:edit在打开新文件之前关闭当前文件。
Skippy le Grand Gourou

Answers:



141

我通常要做的是e .(e-space-dot),它为我提供了一个可浏览的当前目录-然后我可以/-搜索名称片段,就像在文本文件中找到一个单词一样。我发现总体上来说足够好,简单且快速。


22
您不需要空间,节省了25%的额外输入。(:e.)。
康拉德·鲁道夫

67
如果使用大写
字母

2
@drozzy这发生在vim上:-)
DerMike 2012年

7
:e.和之间的行为有所不同:E:如果当前文件已被编辑但尚未保存,则前者会抱怨(如:edit),因为“自从上次更改以来没有写过”,而后者会水平分割窗口(例如:new)以允许打开新文件(如果未修改,则两者都将用新文件替换当前文件(如:edit))。
Skippy le Grand Gourou 2013年

1
如果打开文件,然后将其替换为第二个文件,则可以使用“ e#”回到第一个文件
dkretz

33

:find 是另一种选择。

我从项目的根目录打开vim并将其path放置在那里。

然后,我可以使用以下命令打开树中任意位置的文件:

:find **/filena< tab >

Tab将通过各种匹配自动完成。(**告诉它通过路径进行递归搜索)。


我没有用,:find因为获取相对于工作目录的路径。在此处查看问题和@romainl答案:stackoverflow.com/questions/28224168/…。我发现了更多有趣的@strager答案,以便更轻松地获得相对于工作目录的路径。
ziiweb 2015年

25

您可以使用以下命令在当前路径中搜索文件**

:tabe **/header.h

如果有多个匹配项,请点击标签以查看各种补全。


我尝试使用它,但是这太慢了。我的意思是我的应用程序很大,并且编辑器停止工作了一段时间。您是否知道可以提高编辑器性能和速度的任何设置。
Techmaddy

1
好答案。:tabe **/*der.h如果您不记得文件的全名,请使用类似的名称。
ziiweb 2015年


12

除非我缺少任何东西,否则:e filename是我找到的最快方法。

您也可以使用制表符自动完成文件名。


@dirkgently,是。正如这个问题的标题所暗示的那样,它仍然是捷径,但我认为这不是发问者要寻找的东西。
斯特拉格

对我来说,自动完成标签不适用于:e。此外,您并不总是要搜索以某些内容开头的文件名,而是要搜索文件名中的中间单词。
Andriy Drozdyuk


9

我在.vimrc文件中使用了几个快捷方式(下面的确切语法)。

它们基于以下事实:在90%的情况下,我想在与当前正在编辑的文件相同的目录中,或者在层次结构中与该编辑的文件非常接近的目录中打开另一个文件。

这是命令的作用:

,cd :将当前工作目录更改为您正在编辑的当前文件所在的目录。

,e:打开已填满,所以你必须指定当前工作目录中的文件只是文件名。

将它们放入您的.vimrc中:

map ,e :e <C-R>=expand("%:p:h") . "/" <CR>

map ,cd :cd %:p:h <CR>

这是一系列事件:


  1. 您正在“ / home / prog”中编辑一个名为test.java的文件
  2. ,cd ->当前工作目录现在变为“ / home / prog”
  3. ,e ->扩展为“:e / home / prog”,这样您就可以填写文件名,例如test.h。

  1. ,e ->扩展为“:e / home”
  2. tab ->循环浏览/ home的子目录
  3. enter-> cd到您要说的目录/ home / prog
  4. ,e ->扩展为“:e / home / prog”


6

使用选项卡,它们在vim转义模式下输入文件路径时起作用!


4

如果您有标签(并且应该这样做),则可以仅通过类或方法或c函数的名称从命令行打开文件,使用“ vim -t DBPlaylist”,在vim中使用“:tag ShowList” ”。


4

如果要在公共目录中编辑文件: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有关更多信息,请参阅)。


4

这不完全是你要找的东西,但它的很多情况下好(虽然不是全部)。

如果您打开了VIM,并且缓冲区中有一个文件名,则可以将光标放在该文件名上并键入gf。这将打开名称位于同一缓冲区中光标下方的文件。和...一样

:e CTRL+r CTRL+w


1
我按gf键,现在打开了光标下方的新文件。现在如何返回原始文件。
vrbilgi'1

@ user430294:它在另一个缓冲区中打开。使用:b oldname
Nathan Fellman

@vrbilgi,使用Ctrl + o返回到先前编辑的文件。使用Ctrl + i再次前进到要返回的文件。
Беров

3

我知道三个允许打开文件,支持自动完成并且不需要输入要打开的文件的完整路径名的插件(只要文件位于&pathvim选项的目录之一下)即可。 :

最近,我看到了另一个具有类似功能的插件,但我不记得这个名字了。

很快,:find可能会支持自动完成-这些天来,有关该主题的补丁已在vim_dev邮件列表中流传。


1
  • 您可以使用(设置wildmenu)
  • 您可以使用标签来自动完成文件名
  • 您还可以使用匹配,例如:e p*.dat或类似的东西(例如在旧的dos中)
  • 您还可以:浏览确认e(对于图形窗口)

  • 但是您可能还应该指定使用的vim版本,以及emacs中该版本的工作方式。也许我们可以找到一个确切的vim选择。


1

提到了FuzzyFinder,但是我喜欢textmateFuzzyFinderTextmate的行为插件的行为,该行为将行为扩展为包括所有子目录。

确保您使用的是Fuzzyfinder.vim的2.16版-较高的版本会破坏该插件。


1

使用旺盛的ctags,可以创建带有文件信息的标签文件:

ctags --extra=+f -R *

然后,使用以下命令从VIM打开文件

:tag filename

您也可以使用<tab>自动完成文件名。


1

在GVIM中,可以使用“打开/读取/写入”对话框浏览文件;

:browse {command}

{command}-打开/读/写

打开 -打开文件 读取 -追加文件 写入 -另存为对话框


0

我安装了FuzzyFinder。但是,限制是它只能在当前目录中查找文件。一种解决方法是添加FuzzyFinderTextmate。但是,基于文档和注释,这不能可靠地工作。您需要正确版本的FuzzyFinder,并且需要使用Ruby支持来编译Vim副本。

我现在正在尝试的另一种解决方法是在编辑会话开始时打开所有可能需要的文件。例如,打开关键目录中的所有文件...

:args app/**
:args config/**
:args test/**
etc...

(这意味着我可能会打开数十个文件,但是到目前为止,它似乎仍然可以正常工作。)

之后,我可以在缓冲模式下使用FuzzyFinder,它的作用有点像TextMate的command-o快捷方式...

:FuzzyFinderBuffer

你确定?我的.vimrc中有一些配置,寻找“ g:fuf_abbrevMap”。我必须在文档中找到一个示例。当我键入快捷方式时,然后键入一个缩写,例如“ web:”,它将在我选择的文件夹中查找所有文件。我的问题实际上是由于某种原因它不再打开文件,我在状态栏中看到了[NEW DIRECTORY]。但我对:o有同样的问题,似乎与fuf无关。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.