打开vim时,从树结构中搜索一个文件,如果存在,则执行它

打开vim时,从树结构中搜索一个文件,如果存在,则执行它,vim,Vim,我对每天使用vim很陌生。我正在尽我最大的努力建立一个良好的环境。我经常与Django项目合作。当我在django项目中编辑一个文件时,我想模拟一个类似设置的项目 让我们分析一下这个目录结构: /projects /django-app1 manage.py settings.py .project /django-app1 manage.py settings.py .project 我想要的

我对每天使用vim很陌生。我正在尽我最大的努力建立一个良好的环境。我经常与Django项目合作。当我在django项目中编辑一个文件时,我想模拟一个类似设置的项目

让我们分析一下这个目录结构:

/projects
    /django-app1
       manage.py
       settings.py
       .project
    /django-app1
       manage.py
       settings.py
       .project
我想要的是放置一个名为.project的文件,该文件包含vim命令,如果我打开目录结构中的任何文件,将执行这些命令

为什么??这是我的vimrc,你可以看到,我正在使用一个片段加载VirtualEnvironment变量上的VirtualEnvironment,这很酷,但我认为每次打开一个文件,或者更好地向sys.path添加一些额外的路径,因为我有带有站点包目录的项目

因此:

  • 当使用vim打开文件时,如何检测特定的命名文件,并向下查看当前目录
  • 如何将此文件作为vim脚本执行
启动vim时 我想

vim +'source **/.project' 
你应该做得很好

如果你最近有一次聚会,你也可以更直接地参加

vim -S **/.project

加载python文件时 要在打开/加载特定文件时执行操作,请执行以下操作:

autocmd BufReadPost *.py source %:h/**/.project
加载在包含要打开的文件的子树中找到的任何.project文件

autocmd BufReadPost *.py source %:h/.project
加载在包含要打开的文件的同一目录中找到的任何.project文件

autocmd BufReadPost *.py source %:h/.project
要删除上述自动命令(请记住:添加同一命令两次将执行两次)


有几个名为local_vimrc的插件可以满足您的需要。这是

顺便说一句,你的问题是重复的


编辑:本地vimrc插件的最新实现使用vim7功能。不知何故,这相当于:

source <c-r>=findfile('.local_vimrc',expand('<afile>').';')<cr>
source=findfile('.local_vimrc',expand('))

因此,我更喜欢完整的插件方式,而不仅仅是一个会不时激怒我们的一行代码


注意:我的插件非常旧,它是vim7之前的版本。因为它可以(递归地)工作,我从来没有觉得有必要用现代的vim7列表操作功能重写它。

添加了自动命令方法,在文件加载到缓冲区时执行操作。如果子目录中有文件,它将不起作用。顺便说一句,清除自动命令的最佳方法是将其放入一个组,并清除该组。“如果子目录中有文件”?这似乎总是正确的。请注意我如何使用
%:h
来限制搜索范围一个
:h
是不够的。要正确支持子目录,我们需要查找从当前目录到根目录的任何(/第一个)本地vimrc。类似于
source=findfile('.project',expand('.')
应该可以工作。另请参阅插件。谢谢Luc,我正在使用这个解决方案,很好