Vimとは?
Vim は強力なテキストエディタで、すべての Linux ディストリビューションと Mac OSX のデフォルトコンポーネントの 1 つに属しています。
Vimは独自の使用法に従っているため、コミュニティは強力な支持者とEmacsのような他のエディタを支持する猛烈な反対者に分かれることになります。
(ちなみに、冬にはこの2つの熱狂的なチームが一緒に雪合戦をするのがとてもいい感じです)。
Vimはプラグインを追加することで、あなたのニーズに合わせてカスタマイズや拡張が可能です。
この記事では、拡張機能の一部を紹介し、Pythonを使ったソフトウェア開発を向上させるための便利なセットアップについて説明します。
オートコンプリート
Vim には既にオートコンプリート機能が備わっています。
これはうまく機能しますが、現在のテキストバッファにすでに存在する単語 に限られます。
挿入モードでは、キーの組み合わせ CTRL+N
を使うと現在のバッファにある次の単語を、CTRL+P
を使うと最後の単語を取得します。
どちらの方法でも、単語のメニューがポップアップ表示されますので、そこから貼り付けたい単語を選び、ドキュメントの現在のカーソル位置のテキストに貼り付けます。
これはもう、かなりクールです。
幸いなことに、同じ機能がテキストの行全体にもあります。
挿入モードでは、まず CTRL+X
を押し、次に CTRL+L
を押します。
メニューが表示され、その中から現在のカーソル位置のテキストに貼り付けたい行を選択します。
Python で効率的に開発するために、Vim には pythoncomplete (Python Omni Completion) という標準モジュールがあります。
このプラグインを有効にするには、以下の2行を Vim の設定ファイル .vimrc
に追加してください。
filetype plugin on
set omnifunc=syntaxcomplete#Complete
すると、Vim のエディタウィンドウで、補完機能は CTRL+X
と CTRL+O
のキーの組み合わせによって挿入モードで動作します。
サブメニューがポップアップし、Pythonの関数やキーワードが表示されます。
メニューの項目はPythonモジュールの説明(“docstrings”)に基づいています。
以下の例では、abs()
関数をvimエディタ画面の上にヘルプを追加して表示しています。
次に紹介するのはJedi-Vimというプラグインです。
このプラグインはVimとJediオートコンプリートライブラリを接続します。
Debian GNU/Linux システムに該当するパッケージをインストールした後、Jedi-Vim を動作させるために追加のステップが必要です。
Vimのプラグインマネージャを使って、以下のようにプラグインを有効化する必要があります。
$ vim-addons install python-jedi
Info: installing removed addon 'python-jedi' to /home/frank/.vim
Info: Rebuilding tags since documentation has been modified ...
Processing /home/frank/.vim/doc/
Info: done.
次に、プラグインのステータスを確認します。
$ vim-addons status python-jedi
# Name User Status System Status
python-jedi installed removed
これでプラグインが有効になり、プログラミング中に Vim で使用できるようになります。
ドットをタイプするか、CTRL+Space
を押すとすぐにメニューが開き、適合するメソッドとオペレータの名前が表示されます。
下の画像は csv
モジュールのエントリを表示したものです。
メニューから項目を選択すると、すぐにソースコードに貼り付けられます。
インタラクティブなプラグインとして、youcompletemeがあります。
このプラグインは、「Vim 用の高速な、入力したとおりの、ファジーサーチのコード補完エンジン」であると自称しています。
Python 2と3では、Jediをベースにした自動補完も可能です。
他のプログラミング言語では、C#、Go、Rust、Javaもサポートしています。
Gitリポジトリで提供されているため,使用するためにはセットアップの手順が必要です.Debian GNU/Linuxでは、コンパイル済みのパッケージが提供されており、apt-get
でパッケージをインストールした後、次の手順で動作させることができます。
まず、Vim Addon Manager (vam
) またはコマンド vim-addons
を使ってパッケージを有効化します。
$ vim-addons install youcompleteme
Info: installing removed addon 'youcompleteme' to /home/frank/.vim
Info: Rebuilding tags since documentation has been modified ...
Processing /home/frank/.vim/doc/
Info: done.
次に、プラグインのステータスを確認します。
以下の出力は、一般ユーザーのためにプラグインが正常にインストールされていることを示しています。
$ vim-addons status youcompleteme
# Name User Status System Status
youcompleteme installed removed
3番目に、デフォルトの ycm_extra_conf.py
ファイルを examples ディレクトリから以下のように ~/.vim/
フォルダにコピーします。
$ cp -v /usr/share/doc/vim-youcompleteme/examples/ycm_extra_conf.py .ycm_extra_conf.py
"/usr/share/doc/vim-youcompleteme/examples/ycm_extra_conf.py" -> ".ycm_extra_conf.py"
最後に、以下の2行を .vimrc
ファイルに追加してください。
" youcompleteme
let g:ycm_global_ycm_extra_conf = "~/.vim/.ycm_extra_conf.py"
最初の行は省略可能なコメントで、2行目はyoucompletemeプラグインの設定ファイルを定義しています。
これで、Vim が自動補完を受け付けるようになりました。
便利な補完文字列が提供されたら、TAB
キーを押してそれを受け入れます。
これで、現在の位置に補完文字列が挿入されます。
TAB` キーを繰り返し押すことで、提供された補完文字列が循環します。
シンタックスハイライト
Vim には Python を含む膨大な数のプログラミング言語のためのシンタックスハイライトが既に用意されています。
一つは python-syntax、もう一つは python-mode、そして三つ目は python.vim と呼ばれるプラグインがあります。
python-syntaxプロジェクトのサイトでは、例外、doctests、エラー、定数のハイライトなど、多くの改善点が挙げられています。
Vim の追加コマンド :Python2Syntax
と :Python3Syntax
で Python 2 と 3 のシンタックスハイライトを切り替えられるのも良い機能です。
これは、両方のバージョンでスクリプトを実行するために必要な変更の可能性を特定するのに役立ちます。
Vimとリビジョン管理システムGitの組み合わせ
リビジョン管理は開発者にとって非常に重要であり、Git はおそらくそのための最良のシステムです。
Pythonのコードをコンパイルすると、インタプリタは __pycache__
や *.pyc
のような一時ファイルをいくつか作成します。
これらのファイルの変更は、Gitで追跡する必要はありません。
これらのファイルを無視するために、Gitはいわゆる .gitignore
ファイルという機能を提供しています。
このファイルをGitで管理している開発ブランチに以下の内容で作成します。
*.pyc
__pycache__
また、プロジェクトの内容を記録するために README
ファイルを追加してください。
プロジェクトがどんなに小さくても、 README
ファイルはあなた (と他の人) がそのコードが何をするためのものなのかを覚えておくのに役に立ちます。
このファイルをMarkdown形式で書くと、PythonのコードをGitHub上のリポジトリと同期させる場合に特に便利です。
この README
ファイルは自動的に HTML にレンダリングされ、ウェブブラウザで簡単に見ることができるようになります。
Vim は特別なプラグインを使って直接 Git と連携することができます。
vim-fugitive、gv.vim、vimagitなどがあります。
いずれもGithubから入手可能で、ほとんどがDebian GNU/Linux用のパッケージとして提供されています。
vim-fugitive を apt-get
でダウンロードしたら、他のプラグインと同様の方法で有効化する必要があります。
$ vim-addons install fugitive
Info: installing removed addon 'fugitive' to /home/frank/.vim
Info: Rebuilding tags since documentation has been modified ...
Processing /home/frank/.vim/doc/
Info: done
このプラグインは Git で追跡されているファイルに対してのみ動作します。
Gedit,
:Gdiff,
:Gstatus,
:Ggrep,
:Glog` などの多くの Vim コマンドを使用できるようになります。
プロジェクトのウェブサイトに記載されているように、これらの Vim コマンドは以下の Git コマンドとアクションに対応しています。
-
:Gedit
: インデックスにあるファイルを編集し、その変更をステージングするためにファイルに書き込む -
:Gread
(git checkout -- filename
): カレントバッファにあるファイルの内容を読み込みます。 -
:Gwrite
(git add
): 現在追跡しているファイルのリストに、ファイルを追加します。 -
:Gdiff
(git diff
): ステージングされたファイルのバージョンと作業ツリーのバージョンを並べて表示し、Vim の diff 処理機能を使ってファイルの変更点のサブセットをステージングします。 -
:Gmove
(git mv
): ファイルを新しい場所に移動する -
:Gstatus
(git status
): Git ディレクトリの現在のステータスを表示する -
:Gcommit
(git commit
): 変更をコミットする -
:Ggrep
(git grep
): Git リポジトリから指定されたパターンを検索する -
:Glog
(git log
): ファイルの以前のリビジョンを全てクイックフィックスにロードし、それらを繰り返し見て、ファイルの進化を見ることができます! -
:Gblame
(git blame
): ファイルに対する最後の変更を誰が行ったかを表示します。
スケルトンでの作業
スケルトンファイル(またはテンプレート)は Vim の素晴らしい機能で、新しいファイルを作成するときにデフォルトのテキストを追加することで生産性を向上させるのに役立ちます。
例えば、多くの Python ファイルでは、ファイルの最初に shebang、license、docstring、author information があります。
この情報をファイルごとに入力したり、コピーしたりするのは面倒です。
その代わりに、スケルトン・ファイルを使って、このデフォルト・テキストを追加することができます。
例えば、新しいPythonのファイルはすべて以下のテキストで始まるようにしたいとします。
#!/user/bin/env python3
"""
[Add module documentation here]
Author: Frank
Date: [Add date here]
"""
この内容でファイルを作成し、”skeleton.py “のような名前で、ディレクトリ ~/.vim/skeleton.py
に移動します。
Vim にどのファイルを Python のスケルトンファイルとして使用するかを伝えるには、.vimrc ファイルに以下を追加してください。
au BufNewFile *.py 0r ~/.vim/skeleton.py
これは、”keleton.py “というファイル名にマッチするすべての新しいファイルに対して、指定されたスケルトンファイルを使用するようにVimに指示します。
プラグイン使用時の注意点
通常、Vimはかなり高速に動作します。
プラグインを有効化すればするほど、時間がかかるようになります。
Vimの起動が遅れ、以前より明らかに時間がかかる。
また、Debian/Ubuntuのパッケージは箱から出してすぐに動くのが普通で、インストールスクリプトにはプラグインを適切に設定するための手順がすべて含まれています。
そうではなく、追加の手順が必要な場合があることに気づきました。
その他のリソース
Python開発者として日々使用するための様々なVimの設定をカバーするコースやブログポストが多数ありますので、ぜひご覧ください。
以下のコースは、どのOSでもVimをマスターすることを目的としており、記事を読むだけでは難しいエディタに関する知識と使いやすさを身につけることができるようになっています。
- Vimマスタークラス
その他、私たちが非常に役立つと感じたウェブ上の素晴らしいリソースがいくつかあります。
- Python開発のためのVIMのセットアップ
- フルスタックPython
- VimをPythonのIDEとして使う
これらの記事は、あなたの知識を広げるのに役立ちます。
謝辞
Zoleka Hatitongweの協力と批判的なコメントに感謝したい。