PythonとDjangoで動作するようにVimを構成する





Vimは柔軟性に優れたエディターであり、適切に構成されていれば、Vimを使用するユーザーのすべての要望をほぼ完全に満たすことができます。 確かに、このセットアップは数か月または数年続くことがあり、vimの長所と短所の両方です。 PythonおよびDjangoでの開発にVimを使用することに関する多くの記事とチュートリアルがありますが、何か新しいことを教えていただければ幸いです。 私の記事では、NERDTreeやsurround.vimなどの汎用プラグインの使用を最小限に抑え、Pythonでの作業プロセスを大幅に簡素化したいくつかのより特別な拡張機能と設定について説明します。



DjangoでVimを設定するのは非常に困難であることがわかりました。同じRailsでVimを使用すると、 rails.vimがすべての問題の80%を解決します。 しかし残念なことに、Tim Popeはpythonに対してこのようなことを書いていないので、すべてを部分的に収集しなければなりませんでした。 要するに、議論されるもの:

以下で説明するすべては、gVim for Linuxでテストされています。



Pythonモード


この拡張機能の開発者であるKirill Klenovに感謝します。 それは、バンドルと、病原体を介してうまくインストールされ、うまく動作します。



Pythonモードは、Pythonファイルの設定を設定します。 これがあなたに合わない場合(たとえば、彼が追加したセット番号は必要ありません)、必要な設定を.vimrcに追加します。 これが私の設定の例です:



let g:pymode_options = 0 let g:pymode_lint_write = 0 “     let g:pymode_folding = 0 “   - let g:pymode_rope_vim_completion = 0 “   rope
      
      





ご覧のとおり、自動コードフォールディングを使用しません。また、ファイルを保存するたびにパイリントチェックを行う必要もありません(g:pymode_lint_write = 0とする)。代わりに、コマンドにPyLintを使用できます。 後でオートコンプリートに戻ります。



プラグインは、Pythonコード内のオブジェクトを移動するためのいくつかの便利なホットキーを提供します。

キーボードショートカット チーム
K ドキュメントを表示
<Cc> g 定義に移動
\ r コードを実行する
[[ 前のクラスまたは関数に移動する
]] 次のクラスまたは関数に移動します
aC C クラスのアクションを実行します。 (vaC、daC、dC、yaC、yC、caC、cC)
iC 同じことがクラス内にあります。 (viC、diC、yiC、ciC)
AM M 関数のアクションを実行します。 (vaM、daM、dM、yaM、yM、caM、cM)
iM 同じ、関数内にあります。 (viM、diM、yiM、ciM)
それとは別に、Ropeを使用する機能、特にRopeGoToDefinition 、: RopeFindOccurrences、およびコードの検索とリファクタリングのための他の機能に注目したいと思います。 Ropeコマンドとその略語の完全なリストを表示するには、help RopeKeysを使用します。 さらに、virtualenvのサポートはデフォルトで有効になっています。つまり、同じRopeGoToDefinitionを使用すると、virtualenvのサイトパッケージにインストールされているライブラリの関数の定義に安全にアクセスできます。



コードビュー


このための最も人気のあるプラグインはタグリストですが、ctags(プラグインを使用する前にインストールする必要があります)にも基づいたTagbarを好みます。 ハングアップ:TagbarToggleをいくつかのホットキーでオンにします。例:
 nnoremap <F8> :TagbarToggle<CR>
      
      



次のようになります。







いくつかの追加設定:



 let g:tagbar_autofocus = 1 let g:tagbar_sort = 0 "tagbar shows tags in order of they created in file let g:tagbar_foldlevel = 0 "close tagbar folds by default
      
      





さらに、タグバーウィンドウを表示する側、インデント、アイコンなどを設定できます。 これらはすべて、help tagbarにあります。



自動補完


私がお勧めできるプラグインの1つは、大きな辞書ファイルに基づいてキーワードを補完するPydictionです。 このプラグインには多くの利点があります。

概して、マイナスは1つだけですが、私の意見では非常に重要です。Pydictionは現在のファイルからキーワードを選択しないため、多くの場合、既に知っているPython関数よりもはるかに必要です。



別の方法は、neocomplcacheを使用することです。 プラグインのインストールに加えて、pythonファイルのomnifuncを設定する必要があります。

 autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
      
      





Neocomplcacheはモジュールを追加すると少し悪くなりますが、現在のファイルのキーワードだけでなく、文字列も補完します。 さらに、設定を使用して有効にされるアドオンを自動的にポップアップするオプションがあります。

 let g:neocomplcache_enable_at_startup = 1
      
      





Djangoテンプレート


Vimはdjangoテンプレートの構文をサポートし、ファイルタイプがhtmldjangoの場合に強調表示します。 残念ながら、Vimを開くと、ファイルの先頭にdjangoタグがある場合にのみ、このタイプが自動的に検出されます。 これは、たとえば次の機能を使用して解決できます。



 fun! DetectTemplate() let n = 1 while n < line("$") if getline(n) =~ '{%' || getline(n) =~ '{{' set ft=htmldjango return endif let n = n + 1 endwhile set ft=html "default html endfun
      
      





これは、拡張子が.htmlのファイルを開くときに実行する必要があります。

 autocmd BufNewFile,BufRead *.html call DetectTemplate()
      
      





複数のテンプレートエンジンを使用する場合、テンプレートエンジンのタイプを決定するための条件をより厳密にする必要がありますが、それらの関数を変更することは難しくありません。



ランダム設定





サイトリンク


1. pythonモード

github.com/klen/python-mode

2.タグバー

github.com/majutsushi/tagbar

3.ピディクション

github.com/rkulla/pydiction

4. Neocomplcache

github.com/Shougo/neocomplcache



All Articles