打开vim时,在树结构中搜索文件并执行它(如果存在)

时间:2011-08-22 13:26:32

标签: vim

我是每天使用vim的新手。我正在尽力建立一个良好的环境。我在Django项目中工作很多。我想在django项目中编辑文件时模拟像设置这样的项目。

让我们假设这个目录结构:

/projects
    /django-app1
       manage.py
       settings.py
       .project
    /django-app1
       manage.py
       settings.py
       .project

我想要的是放置一个名为.project的文件,其中包含将在目录结构中打开任何文件时将执行的vim命令

为什么呢?这是我的vimrc https://github.com/mariocesar/dotfiles/blob/master/.vimrc#L151你可以看到我正在使用一个片段加载virtualenv,如果它存在于环境变量上,它非常酷,但我不认为每次打开文件都这样做是有效的,或者甚至更好地添加一些额外的路径到sys.path,因为我有一个带有site-packages目录的项目。

所以:

  • 如何在使用vim打开文件时查看特定的命名文件,查看当前目录?
  • 如何将此文件作为vim脚本执行?

2 个答案:

答案 0 :(得分:1)

启动vim时

我认为

vim +'source **/.project' 

应该很好地完成这个伎俩。

如果你有最近的bash,你也可以更直接

vim -S **/.project

加载python文件时

在打开/加载某个文件时执行操作:

autocmd BufReadPost *.py source %:h/**/.project

加载在包含正在打开的文件的子树中找到的任何.project文件

autocmd BufReadPost *.py source %:h/.project

加载在包含正在打开的文件的同一目录中找到的任何.project文件

删除上述自动命令(请记住:两次添加相同的命令将执行两次)

autocmd! BufReadPost *.py 

答案 1 :(得分:1)

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

顺便说一句,您的问题与Vim: apply settings on files in directory

重复

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

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

(感谢sehe提醒我';')

“不知何故”,因为,缺少许多重要功能:

  • 可以按向下的顺序搜索找到的所有文件。
  • 根目录模式的可选规范(例如'$HOME\|/opt/projects/
  • 像scp://,ftp://,http://这样的外部路径必须正确处理(我还没有测试过它们与findfile()的行为方式)
  • 应该可以在模板扩展器插件触发templare文件的扩展(典型应用程序是generation of header-gates in C/C++ .h files
  • 之前强制执行本地vimrc

因此我倾向于采用完整的插件方式,而不仅仅是一个会不时激怒我们的单行。

注意:我的插件很旧,它是vim7之前的。由于它的工作(递归),我从来没有觉得需要用现代的vim7列表操作函数重写它。