Opening files in the same folder as the current file, in vim
在vim中,当我打开缓冲区时,通常需要在文件所在的目录中加载另一个文件,但是由于我通常不
例:
1 2 | cd /src vi lib/foo/file.js |
lib / foo有两个文件:
在vi中:
1 | :e file2.js # doesn't work |
:Ex的缩写:Explore完全满足您的要求。
我的
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> |
现在
较新版本的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 |
将此行添加到您的
1 | autocmd BufEnter * cd %:p:h |
当前文件%
:p扩展到完整路径
:h head(删除最后一个路径组件)
有关更多信息,请参见
使用autochdir的解决方案有其自身的陷阱。例如,您必须停留在目录中,因为标记是用相对路径定义的,或者您需要在当前目录中使用Makefile或pom.xml。
您可以使用
1 | :e <C-R>% |
然后通过删除当前文件的名称并输入新文件来修改路径。
要么。
使用地图
1 | nnoremap <leader>e :edit <C-R>=fnamemodify(@%, ':p:h')<CR>/ |
然后按 \ e或,e(取决于领导者设置),您将收到打开当前文件所在目录的命令,您可以手动完成此命令,并可以使用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 |
在"快捷方式"的前面,您是否研究过
我将其绑定到
1 | map ;o :Sex <CR> |
如果要将
另一种选择是:
1 | :e <Tab> |
这会循环浏览工作目录中的文件夹。