在vim中,当我打开缓冲区时,我经常需要在文件所在的同一目录中加载另一个文件,但由于我通常不cd
进入它,pwd
是一个父文件夹,所以我每次都要重新键入路径。这有什么捷径吗?或者将pwd更改为文件所在目录的方法?
示例:
cd /src
vi lib/foo/file.js
lib / foo 有两个文件:file.js
和file2.js
in vi:
:e file2.js # doesn't work
答案 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>
这会循环显示工作目录中的文件夹。