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

clo*_*ead 47 unix vi vim

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

例:

cd /src
vi lib/foo/file.js
Run Code Online (Sandbox Code Playgroud)

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

在vi中:

:e file2.js  # doesn't work
Run Code Online (Sandbox Code Playgroud)

sum*_*mek 53

:Ex的简称:Explore完全符合您的要求.

  • 对于有效的解决方案,这似乎是最简单的答案. (4认同)
  • 我更喜欢`:性` (4认同)
  • 在Ex中按%时,它将询问您一个新文件。@雅各布·沙夫 (3认同)
  • :性很棒, :Vex 可能更好 (2认同)

hgm*_*mnz 45

我有以下三行.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>
Run Code Online (Sandbox Code Playgroud)

现在,e <some-file>打开这个缓冲区.,t,s在新的选项卡/拆分窗口上执行相同操作.

  • 这是我在这里发布的解决方案的最爱.我不喜欢自动更改到当前文件目录的想法.我更喜欢在项目的根目录中打开vim,这意味着`:e`总是从顶部向下钻取.到目前为止,如果我想在与当前文件相同的目录中打开一个文件,我会使用`:E`来调出netrw文件资源管理器.使用你的`,e`映射感觉要快得多.您可以通过选项卡查看当前目录中的文件. (8认同)

gre*_*egf 32

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

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


Cor*_*son 26

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

set autochdir
Run Code Online (Sandbox Code Playgroud)

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

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


小智 15

请尝试以下方法:

:e %:p:h/file2.js
Run Code Online (Sandbox Code Playgroud)

  • 这是最通用解决方案的最短答案.学习`%:p:h /`作为当前路径的快捷方式,有助于将其应用于可能需要当前路径的任何其他情况,如`:r`,`:w`,... (2认同)
  • `:sp %:h/file2.js` 似乎也有效。或者,您可以执行 `:sp %&lt;tab&gt;` 然后根据需要编辑文件名。 (2认同)

rcs*_*rcs 9

将此行添加到您的vimrc配置中

autocmd BufEnter * cd %:p:h
Run Code Online (Sandbox Code Playgroud)

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

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

  • 请注意,此功能可能会破坏插件,如":help'autochdir'"中所述. (2认同)

Myk*_*yev 5

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

您可以使用

:e <C-R>%
Run Code Online (Sandbox Code Playgroud)

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

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

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

要么.你可以试试0scan插件.

按键 0f