在Vim中打开文件的快捷方式
我想使用Ctrl+Shift+R或通过autofill的Ctrl+N选项在Vim中打开一个文件,就像在Eclipse中一样。调用键盘快捷键,键入文件名/模式,然后从所有匹配的文件名中进行选择 我知道打开它通常是这样的:在Vim中打开文件的快捷方式,vim,keyboard-shortcuts,Vim,Keyboard Shortcuts,我想使用Ctrl+Shift+R或通过autofill的Ctrl+N选项在Vim中打开一个文件,就像在Eclipse中一样。调用键盘快捷键,键入文件名/模式,然后从所有匹配的文件名中进行选择 我知道打开它通常是这样的: :tabe <filepath> :new <filepath> :edit <filepath> :tabe :新 :编辑 这里的问题是,在这些情况下,我必须指定整个文件路径。使用选项卡,它们在vim escape模式下输入文件路径时工作
:tabe <filepath>
:new <filepath>
:edit <filepath>
:tabe
:新
:编辑
这里的问题是,在这些情况下,我必须指定整个文件路径。使用选项卡,它们在vim escape模式下输入文件路径时工作 除非我遗漏了什么,:e filename是我找到的最快的方式
您也可以使用tab自动完成文件名。您可以使用
**
在当前路径中搜索文件:
:tabe **/header.h
如果有多个匹配项,请点击tab以查看各种完成情况。我喜欢设置中的:FuzzyFinderTextMate(或Ctrl+F)。
请参见如果您有标签(您应该这样做),您可以通过命令行打开一个文件,只需输入类或方法或c函数的名称,使用“vim-t DBPlaylist”,并在vim中使用“:tag ShowList”。我最近爱上了…:-) :fuzzyFindFile将允许您通过键入部分名称或模式来打开文件
- 您可以使用(设置菜单)
- 您可以使用tab自动完成文件名
- 您还可以使用匹配,例如:e
或类似的东西(如在旧的“dos”中)p*.dat
- 您还可以:浏览确认e(用于图形窗口)
- 但您可能还应该指定您正在使用的vim版本,以及emacs中的工作方式。也许我们可以给你找到一个确切的vim替代品
: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:\%:
)将其修剪到当前目录:
而且,正如其他人所说,您可以在ex行上标记完整的文件名(有关更多信息,请参见
:help cmdline completion
)我在.vimrc文件中使用了几个快捷方式(确切语法如下)
它们基于这样一个事实,即在90%的情况下,我希望在与当前编辑的文件相同的目录中打开另一个文件,或者在层次结构中非常接近该已编辑文件的目录中打开另一个文件
命令的作用如下:
map ,e :e <C-R>=expand("%:p:h") . "/" <CR>
map ,cd :cd %:p:h <CR>
,cd
:将当前工作目录更改为当前正在编辑的文件所在的目录
,e
:打开一个文件,其中当前工作目录已填充,因此您必须仅指定文件名
将这些放入您的.vimrc:
map ,e :e <C-R>=expand("%:p:h") . "/" <CR>
map ,cd :cd %:p:h <CR>
map,e:e=expand(“%:p:h”)。"/"
地图,cd:cd%:p:h
以下是一系列事件:
map ,e :e <C-R>=expand("%:p:h") . "/" <CR>
map ,cd :cd %:p:h <CR>
,cd
->现在是当前工作目录
变为“/主页/进度”,e
->扩展为“:e/home/prog”so
你只需要填写这个文件
名字,比如test.h,e
->扩展为“:e/home”选项卡
->循环浏览/home的子目录将->cd
输入您要访问的目录
想说/家/节目吗
,e
->扩展为“:e/home/prog”我知道有三个插件允许打开文件,支持自动完成,并且不需要输入要打开的文件的完整路径名(只要文件位于
&path
vim选项中的一个目录下):
- 我正在维护的(完成不是在
/:e
,而是在拆分操作上):find
- 正如已经指出的那样
很快,:find可能会支持自动完成功能——关于这个主题的补丁最近在vim_dev邮件列表上流传。我通常做的是
e.
(e-space-dot),它给了我一个可浏览的当前目录-然后我可以/
-搜索名称片段,就像在文本文件中查找单词一样。我发现这已经足够好了,简单又快速。FuzzyFinder已经被提到,但是我喜欢插件的textmate行为,它将行为扩展到包括所有子项
确保您使用的是fuzzyfinder.vim的2.16版-更高版本会破坏插件。我安装了fuzzyfinder。但是,限制是它只在当前目录中查找文件。解决方法之一是添加FuzzyFinderTextmate。然而,根据文件和评论,这并不可靠。您需要正确版本的FuzzyFinder,并且需要使用Ruby支持编译Vim副本 我现在尝试的另一种解决方法是在编辑会话开始时打开所有可能需要的文件。例如,打开关键目录中的所有文件
:args app/**
:args config/**
:args test/**
etc...
(这意味着我可能会打开几十个文件,但到目前为止,它似乎仍然可以正常工作。)
之后,我可以在缓冲区模式下使用FuzzyFinder,它的行为有点像TextMate的command-o
快捷方式
:FuzzyFinderBuffer
这并不是你想要的,但在很多情况下(虽然不是全部)都是好的
如果你打开VIM,缓冲区中有一个文件名,你可以把光标放在这个文件名上,然后键入gf。这将打开名称位于同一缓冲区中光标下的文件。这和
:e CTRL+r CTRL+w
:find
是另一个选项
我从项目的根目录打开vim,并将路径设置为那里
然后,我可以使用以下方法打开树中任意位置的文件:
:find **/filena< tab >
:查找**/filena<
:tag filename
:browse {command}