Настройка фрагментов Django SnipMate только для проектов Django - PullRequest
3 голосов
/ 22 февраля 2011

Я использую SnipMate с отрывками Роба Хадсона snipmate_for_django для разработки Django с MacVim .

Для автоматической активации фрагментовосновываясь на типе файла, Роб рекомендует добавить следующее к ~/.vimrc:

autocmd FileType python set ft=python.django " For SnipMate
autocmd FileType html set ft=htmldjango.html " For SnipMate

. Включает фрагменты htmldjango для всех файлов html.

Есть ли способ включить фрагменты htmldjango только для файлов html, расположенных в проекте Django?

Например, я не хочу включать htmldjango фрагменты, если я работаю над файлом html, связанным с проектом Rails.

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

У меня тоже есть эта строка, но мне интересно, нужна ли она. filetype.vim по умолчанию, который поставляется с MacVim - найдите его в /Applications/MacVim.app/Contents/Resources/vim/runtime/filetype.vim - содержит немного кода, который должен автоматически различать обычный HTML и Django, путем проверки, чтобы увидеть, есть ли тег extends или block в первые несколько строк:

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 голос
/ 22 февраля 2011

Вы должны проверить, как это делается в rails.vim , плагине Rails от Tim Pope, который работает таким образом.

Если вы редактируете * .rb (файл Ruby) из проекта Rails вы включаете некоторую конкретную конфигурацию 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, и, если это так, создает событие BufEnterRails с silent doau User BufEnterRails, и в случае возникновения BufEnterRails существует другая автокоманда.

Вы должны следовать по тому же пути для вашего плагина.При открытии буфера вы должны попытаться найти определенный файл или каталог Django в пути к файлу html, который вы редактируете, а затем решить, находитесь ли вы в проекте Django или нет.

Так как я не знаюDjango, я не могу сказать, какой файл искать, но, скорее всего, есть файл конфигурации проекта, общий для каждого проекта Django.

...