3

MacVimでのDjango開発には、RobHudsonのスニペットでSnipMateを使用しています。snipmate_for_django

ファイルタイプに基づいてスニペットを自動的にアクティブ化するには、Robは以下を追加することをお勧めします~/.vimrc

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

これにより、htmldjangoすべてのファイルのスニペットが有効になりhtmlます。

Djangoプロジェクトにあるファイルhtmldjangoに対してのみスニペットを有効にする方法はありますか?html

たとえば、Railsプロジェクトに関連するファイルhtmldjangoで作業している場合、スニペットを有効にしたくありません。html

4

2 に答える 2

1

Rails.vimでどのように行われるかを確認する必要があります。これはTimPopeの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作成し、BufEnterRailsが発生した場合に備えて別の自動コマンドがあります。BufEnterRailssilent doau User BufEnterRails

プラグインについても同じパスをたどる必要があります。バッファを開くときは、編集しているhtmlファイルパスで特定のDjangoファイルまたはディレクトリを見つけて、Djangoプロジェクトにいるかどうかを判断する必要があります。

Djangoがわからないため、どのファイルを探すべきかわかりませんが、すべてのDjangoプロジェクトに共通のプロジェクト構成ファイルがある可能性があります。

于 2011-02-22T14:21:50.430 に答える
1

そのセリフもありますが、必須なのかな。filetype.vimMacVim に付属するデフォルト (次の場所にあります) には、最初の数行にorタグが/Applications/MacVim.app/Contents/Resources/vim/runtime/filetype.vimあるかどうかをテストすることによって、プレーンな HTML と Django を自動的に区別するはずのコードが含まれています。extendsblock

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て決定タグに追加しましたが、ほとんどの場合、それで十分なようです。

于 2011-02-22T14:30:32.173 に答える