首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅为Django项目配置Django SnipMate片段

仅为Django项目配置Django SnipMate片段
EN

Stack Overflow用户
提问于 2011-02-22 21:14:39
回答 2查看 1.5K关注 0票数 3

我正在使用带有Rob Hudson的snipmate_for_django片段的SnipMateMacVim进行Django开发。

要根据文件类型自动激活代码片段,Rob建议在~/.vimrc中添加以下内容

代码语言:javascript
复制
autocmd FileType python set ft=python.django " For SnipMate
autocmd FileType html set ft=htmldjango.html " For SnipMate

这将为所有html文件启用htmldjango代码段。

有没有办法只为位于Django项目中的html文件启用htmldjango片段?

例如,如果我正在处理一个与Rails项目相关的htmldjango文件,我就不想启用html代码段。

EN

回答 2

Stack Overflow用户

发布于 2011-02-22 22:21:50

你应该看看它是如何在rails.vim中完成的,这是Tim Pope的Rails插件,它是这样工作的。

如果您正在编辑来自Rails项目的*.rb (Ruby文件),则需要启用一些特定的Rails配置。但如果您正在编辑非Rails ruby文件,则不会。

您应该自己检查源代码,但是检测的入口点如下:

代码语言:javascript
复制
augroup railsPluginDetect
  autocmd!
  autocmd BufNewFile,BufRead * call s:Detect(expand("<afile>:p"))
  autocmd VimEnter * if expand("<amatch>") == "" && !exists("b:rails_root") | call s:Detect(getcwd()) | endif | if exists("b:rails_root") | silent doau User BufEnterRails | endif
  autocmd FileType netrw if !exists("b:rails_root") | call s:Detect(expand("<afile>:p")) | endif | if exists("b:rails_root") | silent doau User BufEnterRails | endif
  autocmd BufEnter * if exists("b:rails_root")|silent doau User BufEnterRails|endif
  autocmd BufLeave * if exists("b:rails_root")|silent doau User BufLeaveRails|endif
  autocmd Syntax railslog if s:autoload()|call rails#log_syntax()|endif
augroup END

基本上,s:Detect所做的就是找到Rails项目的根目录,并检查是否存在./config/environment.rb,如果是这样的话,它会使用silent doau User BufEnterRails创建一个event BufEnterRails,并在发生BufEnterRails的情况下使用另一个自动命令。

您必须遵循与您的插件相同的路径。在打开buffer时,您应该尝试在您正在编辑的html文件路径中查找特定的Django文件或目录,然后确定您是否在Django项目中。

因为我不知道Django,所以我不知道要查找哪个文件,但可能每个Django项目都有一个通用的项目配置文件。

票数 1
EN

Stack Overflow用户

发布于 2011-02-22 22:30:32

我也有这一行,但我想知道它是否是必需的。MacVim附带的默认filetype.vim -可以在/Applications/MacVim.app/Contents/Resources/vim/runtime/filetype.vim上找到-包含一些代码,通过测试前几行中是否有extendsblock标记,可以自动区分普通的HTML和Django:

代码语言:javascript
复制
au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm  call s:FThtml()

" Distinguish between HTML, XHTML and Django
func! s:FThtml()
  let n = 1
  while n < 10 && n < line("$")
    if getline(n) =~ '\<DTD\s\+XHTML\s'
      setf xhtml
      return
    endif
    if getline(n) =~ '{%\s*\(extends\|block\)\>'
      setf htmldjango
      return
    endif
    let n = n + 1
  endwhile
  setf html
endfunc

我实际上已经破解了这一点,将load添加到决定标记,但这似乎在几乎所有情况下都足够了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5078592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档