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

时间:2009-11-10 15:04:25

标签: unix vim vi

在vim中,当我打开缓冲区时,我经常需要在文件所在的同一目录中加载另一个文件,但由于我通常不cd进入它,pwd是一个父文件夹,所以我每次都要重新键入路径。这有什么捷径吗?或者将pwd更改为文件所在目录的方法?

示例:

cd /src
vi lib/foo/file.js

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

in vi:

:e file2.js  # doesn't work

12 个答案:

答案 0 :(得分:51)

:简称:探索完全符合您的要求。

答案 1 :(得分:44)

.vimrc上有以下三行:

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

现在,e <some-file>在此缓冲区上打开。 <{1}}和,t在新的标签/拆分窗口上执行相同操作。

答案 2 :(得分:30)

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

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

答案 3 :(得分:25)

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

set autochdir

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

注意:我不确定添加此功能的版本。我从vim 6更新到7.2以使其工作。

答案 4 :(得分:14)

尝试以下方法:

:e %:p:h/file2.js

答案 5 :(得分:9)

将此行添加到vimrc配置

autocmd BufEnter * cd %:p:h

%当前文件名
:p扩展到完整路径
:h head(删除最后一个路径组件)

有关详细信息,请参阅:help expand

答案 6 :(得分:5)

autochdir的解决方案有其自身的缺陷。例如,你必须留在你的目录,因为标签是用相对路径定义的,或者你需要在当前目录中使用Makefile或pom.xml。

您可以使用

:e <C-R>%

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

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

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

或者。 您可以尝试0scan插件。

0 ˚F

答案 7 :(得分:3)

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

autocmd BufEnter * lcd %:p:h

答案 8 :(得分:3)

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

答案 9 :(得分:2)

你可能知道,一旦你进入vim,就可以使用

:cd lib/foo

改为lib / foo。

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

:cd %:p:h

您可以随时使用

:pwd

检查您当前的工作目录。

当然,如果您忘记了正在编辑的文件,只需按ctrl-g。

答案 10 :(得分:2)

在“快捷方式”方面,您是否查看了:Sex命令?这将以分割方式打开文件浏览器,以便您可以轻松打开其他文件。 :Sex默认为当前缓冲区的目录。非常漂亮的功能,如果我自己这么说的话 我将其绑定到;o以便于访问:

map ;o :Sex <CR>

如果您想将其保留在当前缓冲区中而不是创建拆分,也可以使用:Ex

答案 11 :(得分:0)

另一个选择是:

:e <Tab> 

这会循环显示工作目录中的文件夹。