关于Unix:在Vim中打开与当前文件相同的文件夹中的文件

Opening files in the same folder as the current file, in vim

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

例:

1
2
cd /src
vi lib/foo/file.js

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

在vi中:

1
:e file2.js  # doesn't work

:Ex的缩写:Explore完全满足您的要求。


我的.vimrc上有以下三行:

1
2
3
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 在此缓冲区上打开。 ,t,s相同,但是在新的选项卡/拆分窗口上。


较新版本的vim内置有autochdir命令,如果没有,您可以使用BufEnter之类的设置。

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


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

1
set autochdir

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

注意:我不确定哪个版本添加了此功能。我从vim 6更新到7.2,以使其正常工作。


请尝试以下操作:

1
:e %:p:h/file2.js


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

1
autocmd BufEnter * cd %:p:h

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

有关更多信息,请参见:help expand


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

您可以使用

1
:e <C-R>%

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

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

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

要么。
您可以尝试使用0scan插件。

按键
0f


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

1
:cd lib/foo

更改为lib / foo。

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

1
:cd %:p:h

您可以随时使用

1
:pwd

检查您当前的工作目录。

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


所以vim有一个:find命令,它将使用变量'path'。如果您的代码具有一致的目录结构,例如" src"目录下的所有源代码,则可以将其添加到" path"变量中。然后,当您执行:find foo.js时,它将搜索当前位置,然后搜索path变量中列出的文件夹。它基本上模拟了bash或其他Shell使用PATH变量来查找要运行的适当二进制文件的方式。


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

1
autocmd BufEnter * lcd %:p:h

在"快捷方式"的前面,您是否研究过:Sex命令?这会拆分打开文件浏览器,以便您可以轻松打开其他文件。 :Sex默认为当前缓冲区的目录。如果我自己说的话,这很漂亮。
我将其绑定到;o以便于访问:

1
map ;o :Sex <CR>

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


另一种选择是:

1
:e <Tab>

这会循环浏览工作目录中的文件夹。