在vim中打开与当前文件相同的文件夹中的文件

在vim中,当我打开一个缓冲区的时候,我经常需要在文件所在的同一个目录中加载另一个文件,但是因为我通常不会进入它,所以pwd是一个父文件夹,所以我必须重新input每一次的path。 有没有这个捷径? 或者将pwd更改为文件所在目录的方法?

例:

 cd /src vi lib/foo/file.js 

lib / foo有两个文件: file2.jsfile2.js

在vi中:

 :e file2.js # doesn't work 

较新版本的vim有一个内置的autochdir命令,如果没有,你可以回落到一个BufEnter的设置。

 " set vim to chdir for each file if exists('+autochdir') set autochdir else autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ / endif 

我的.vimrc有以下三行:

 map ,e :e <CR>=expand("%:p:h") . "/" <CR> map ,t :tabe <CR>=expand("%:p:h") . "/" <CR> map ,s :split <CR>=expand("%:p:h") . "/" <CR> 

现在,e <some-file>在这个缓冲区上打开,e <some-file>,t,s做同样,s事情,但在一个新的选项卡/拆分窗口。

:简要介绍:探索完全是你所要求的。

一个简单的想法是使用autochdir设置。 尝试在您的.vimrc中:

 set autochdir 

这会将vim的工作目录更改为您打开的文件的目录。

注意:我不确定哪个版本添加了这个function。 我从vim 6更新到7.2来使这个工作。

尝试以下操作:

 :e %:p:h/file2.js 

将此行添加到您的vimrcconfiguration中

 autocmd BufEnter * cd %:p:h 

%当前的文件名
:p扩展到完整path
:h头(删除最后一个path组件)

请参阅:help expand以获取更多信息。

autochdir的解决scheme有其自身的缺陷。 例如,您必须留在目录中,因为标记是用相对path定义的,或者您需要当前目录中的Makefile或pom.xml。

您可以使用

 :e <CR>% 

然后通过删除当前文件的名称来修改path并input新的文件。 要么。 使用地图

 nnoremap <leader>e :edit <CR>=fnamemodify(@%, ':p:h')<CR>/ 

然后按\ ee (取决于领导者设置),您将收到打开您当前文件所在目录的命令,您可以手动完成此命令,并可以使用ctrl D显示当前文件目录中的所有文件。

要么。 你可以尝试0scan插件。

0 f

所以vim有一个find命令,它将使用variables'path'。 如果你的代码具有一致的目录结构,例如目录“src”下的所有源代码,那么你可以将它添加到“path”variables中。 然后当你这样做:findfoo.js它将search你的当前位置,然后在pathvariables中列出的文件夹。 它基本上模拟了bash或其他一些shell使用PATHvariables来查找适当的二进制文件的方式。

我把它放在我的.vimrc文件中,它将把当前目录改变为缓冲区中的文件。 这将设置缓冲区的当前目录,并在切换缓冲区时进行更新。

 autocmd BufEnter * lcd %:p:h 

你可能知道,一旦你在vim中,你可以使用

 :cd lib/foo 

换成lib / foo。

另一方面,要更改到当前正在编辑的文件的目录,请尝试

 :cd %:p:h 

你可以随时使用

 :pwd 

检查你当前的工作目录。

当然,如果你忘记了你正在编辑的文件,只需点击ctrl-g即可。

在“快捷方式”面前,你有没有看过:Sex命令? 这将打开文件浏览器,以便您可以轻松打开其他文件。 :Sex默认为当前缓冲区的目录。 相当漂亮的function,如果我自己这样说。
我把它绑定到;o为了方便访问:

 map ;o :Sex <CR> 

您也可以使用:Ex如果你想保留在当前的缓冲区,而不是创build一个拆分。

另一个select是做:

 :e <Tab> 

这循环通过您的工作目录中的文件夹。