Vimは柔軟性に優れたエディターであり、適切に構成されていれば、Vimを使用するユーザーのすべての要望をほぼ完全に満たすことができます。 確かに、このセットアップは数か月または数年続くことがあり、vimの長所と短所の両方です。 PythonおよびDjangoでの開発にVimを使用することに関する多くの記事とチュートリアルがありますが、何か新しいことを教えていただければ幸いです。 私の記事では、NERDTreeやsurround.vimなどの汎用プラグインの使用を最小限に抑え、Pythonでの作業プロセスを大幅に簡素化したいくつかのより特別な拡張機能と設定について説明します。
DjangoでVimを設定するのは非常に困難であることがわかりました。同じRailsでVimを使用すると、 rails.vimがすべての問題の80%を解決します。 しかし残念なことに、Tim Popeはpythonに対してこのようなことを書いていないので、すべてを部分的に収集しなければなりませんでした。 要するに、議論されるもの:
- Pythonモード
- タグバー
- 狂言
- neocomplcache
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) |
コードビュー
このための最も人気のあるプラグインはタグリストですが、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です。 このプラグインには多くの利点があります。
- 自動補完は、Tabキーによって実行されます。Ctrlとのあらゆる種類の組み合わせを覚える必要はありません。
- 競合はまったくありません。同時にPomictionをオムニコンプリートで使用できます。
- オートコンプリートは他の種類のファイルには影響しません
- インポートされたオブジェクトを補完できる
- 非常に簡単に、独自のモジュールを辞書に追加できます:python pydiction.py module_name
別の方法は、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()
複数のテンプレートエンジンを使用する場合、テンプレートエンジンのタイプを決定するための条件をより厳密にする必要がありますが、それらの関数を変更することは難しくありません。
ランダム設定
- Pythonインデント:
autocmd FileType python setlocal ts=4 sts=4 sw=4
- NERDTreeを使用する場合、無視されるファイルのリストに.pycを追加する必要があります。
let NERDTreeIgnore=['\.pyc$']
- ipdbデバッガーをコードに挿入するための簡単な略記
iab ipdb import ipdb; ipdb.set_trace()
- ファイルの先頭でエンコーディングを指定するショートカット:
iab utf! # -*- coding: utf-8 -*-
- オムニコンプリートのドキュメントで迷惑なポップアップを削除します。
set completeopt-=preview
- 配色のペア: darkspectrum 、 gruvbox 、 Lucius
サイトリンク
1. pythonモード
github.com/klen/python-mode
2.タグバー
github.com/majutsushi/tagbar
3.ピディクション
github.com/rkulla/pydiction
4. Neocomplcache
github.com/Shougo/neocomplcache