我正在使用带有Rob Hudson的snipmate_for_django片段的SnipMate和MacVim进行Django开发。
要根据文件类型自动激活代码片段,Rob建议在~/.vimrc中添加以下内容
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代码段。
发布于 2011-02-22 22:21:50
你应该看看它是如何在rails.vim中完成的,这是Tim Pope的Rails插件,它是这样工作的。
如果您正在编辑来自Rails项目的*.rb (Ruby文件),则需要启用一些特定的Rails配置。但如果您正在编辑非Rails ruby文件,则不会。
您应该自己检查源代码,但是检测的入口点如下:
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项目都有一个通用的项目配置文件。
发布于 2011-02-22 22:30:32
我也有这一行,但我想知道它是否是必需的。MacVim附带的默认filetype.vim -可以在/Applications/MacVim.app/Contents/Resources/vim/runtime/filetype.vim上找到-包含一些代码,通过测试前几行中是否有extends或block标记,可以自动区分普通的HTML和Django:
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添加到决定标记,但这似乎在几乎所有情况下都足够了。
https://stackoverflow.com/questions/5078592
复制相似问题