VimでPythonのIDE 環境を一から構築する

Python
スポンサーリンク

WS000008

VimでPythonのIDE環境を構築するために、この週末を費やしていました。納得の行くところまで実装できたので、忘備録として残しておきます。これから新しくPythonのためにVimを使おうと思っている人も、すでに使ってらっしゃる方にも参考になれば嬉しいです。

筆者環境

  • Windows 7 x64
  • Python 2.7.9 x32

Vimの導入・設定

Vimは普通に公式ページからインストールしても結構ですが、日本人の間ではKaoriya版のVimがよく使われているそうです。日本語の対応や、Shogoさんのneocompleteのプラグインを使うために必要なLuaを含めたビルドになっている等、Kaoriyaを使うメリットは多いです。

Vim — KaoriYa
はてブ数
VimのWindows向けコンパイル済みバイナリを配布しています。

上記サイトから対象のVimのバイナリを入手して、対象のProgram Files下のディレクトリに保存してください。フォルダ中の"gvimrc"と"vimrc"というファイルは、とりあえず不要な設定が導入されているので削除しておきます。

他との兼ね合い上、Vimのencodingをutf-8で使いたいため、vim74-kaoriya-win32/switches/catalogフォルダに保存されているutf-8.vimをvim74-kaoriya-win32/switches/enabledフォルダに移動しておきます。

Kaoriyaを使うことに関しては、上記サイトを読んでおくと勉強になります。

Vundleの設定

rubyのBundleみたいな感じで簡単にGit上のVimプラグインを導入するためのプラグインです。

「NeoBundleを使うべき」みたいな記述をとても多く見つけるので、NeoBundleを使ったほうが良いかもしれませんが、まだVundleで事足りる程度しか使いこなせていないため、とりあえずVundleを導入しています。

インストールは~/.vim/bundleというディレクトリを作成し、上記サイトよりダウンロードしたファイルを~/.vim/bundle/vundleに保存します。

~/.vimrcというファイルを作成し、下記のように記述します。

set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" let Vundle manage Vundle
" required!
Bundle 'gmarik/vundle'

これでVundleを使う準備ができました。

プラグインのインストール

~/.vimrcに下記のようにプラグインを追加していきます。

Bundle 'altercation/vim-colors-solarized'
Bundle 'davidhalter/jedi-vim'
Bundle 'bronson/vim-trailing-whitespace'
Bundle 'airblade/vim-gitgutter'
Bundle 'kevinw/pyflakes-vim'
Bundle 'Shougo/neocomplete.vim'
Bundle 'scrooloose/nerdtree'
Bundle 'bling/vim-airline'
Bundle 'thinca/vim-quickrun'
Bundle 'kien/ctrlp.vim'
Bundle 'ivanov/vim-ipython'

追加ができたら保存して、Vim上で.vimrcを操作していたならば":so %"のコマンドを入力、それ以外の場合はVimを再起動します。

:BundleInstall

上記のコマンドをVim上で行うと、自動でプラグインがインストールされます。

各プラグインの説明と設定

Pythonの強力な入力補完 jedi-vim

Pythonの入力補完用プラグインで、かなり強力です。

ただいくつか不要な機能があるので、無効化するために設定します。

.vimrcに下記を追加します。

let g:jedi#auto_vim_configuration = 0

if !exists('g:neocomplete#force_omni_input_patterns')
        let g:neocomplete#force_omni_input_patterns = {}
endif

let g:neocomplete#force_omni_input_patterns.python = 'hw*|[^. t].w*'

~/.vim/bundle/jedi-vim/jedi_vim.pyを少し書き換えます。

+ info=PythonToVimStr(c.docstring()),  # docstr
- info=PythonToVimStr(""),

見栄えをよくしよう! vim-colors-solarized

solarizedのテーマを使うためのプラグインです。見た目がよく人気らしいので、導入してみました。

テーマを反映させるために、.vimrcに下記コードを追加します。

" -- solarized personal conf
set background=dark
try
    colorscheme solarized
catch
endtry

Vim上から編集中のPythonを実行! vim-quickrun

この機能がなければIDEと呼べないですね。私はquickrunで実現してみました。Pythonファイルの編集中にF11を押せば実行されます。標準の設定から、結果が表示される位置を変更しています。

nnoremap <F11> :QuickRun<CR>

let g:quickrun_config = {
   "_" : {
       "outputter/buffer/split" : ":botright",
       "outputter/buffer/close_on_empty" : 1
   },
}

nnoremap <expr><silent> <C-c> quickrun#is_running() ? quickrun#sweep_sessions() : "<C-c>"

これがなきゃ始まらない! vim-ipython

これは後日記事にしようと思います。ちょっとした設定をしないとちゃんと動きません。

余計な空白を一気に削除 vim-trailing-whitespace

":FixWhitespace"というコマンドで余計な余白を削除することができます。

VimでGItの変更点が分かる vim-gitgutter

Vim上からGitの変更点を識別するためのプラグインです。

Pythonの構文解析 pyflakes-vim

Pythonの構文を解析し、エラーや警告を表示してくれるようになります。

入力補完 neocomplete

有名な補完プラグインらしいです。これから勉強します。

ファイルマネジメント nerdtree

ファイルツリーウィンドウを表示してくれます。私は.vimrcに下記のように書き加えて F2 ボタンで表示するようにしました。

map <F2> :NERDTreeToggle<CR>

ステータスバーをかっこ良く! vim-airline

ステータスバーの表示をかっこ良くするプラグインです。powerlineとどちらを使うかかなり迷ったのですが、機能が豊富そうなairlineにしました。

私のairline用の.vimrcの設定をご紹介しておきます。tablineを有効にしています。

set laststatus=2
let g:airline#extensions#tabline#enabled = 1
let g:airline_theme             = 'powerlineish'

多機能セレクタ ctrlp.vim

カレントディレクトリから対象のファイルを探してくれるコマンドを入力できるようになります。

ctrlp.vimの使い方まとめ – Qiita
はてブ数
ctrlp.vimとは ctrlp.vimは多機能セレクタとかそんな感じのvimプラグインです。環境変わるのが嫌で、カラースキーマやシンタックス関係意外あんま...

.vimrcの追加の設定

Windows歴20年以上なので、CTRL+VとCはどうしても欲しいところ。あと、Insertモード中のBackspaceでは改行も消して欲しい。そういった変更を加えています。

Insertモード中だけ、CTRL+Vでクリップボードに貼付けができ、Visualモード中だけCTRL+Cでクリップボードにコピーできます。

set encoding=utf-8
syntax on
set shiftwidth=4
set autoindent
set expandtab
set tabstop=4
set softtabstop=4
set number
set backspace=indent,eol,start
imap <C-V> <C-R>+
vmap <C-C> "+y
filetype plugin indent on

全画面表示で起動時する

" Run maximized in GUI
if has("gui_running")
   au GUIEnter * simalt ~x
endif

デバッガー機能について

Eclipseからの乗り換えなので、pydevのような機能をVimにも欲しくなるのですが、残念ながらWindowsではこの機能の実装は難しいようです。

どうしても必要な場合は、Eclipse上から行うべきです。

参考までに、挑戦したプラグインについてご紹介しておきます。

pyclewn

Home — pyclewn
はてブ数
A Vim front-end to the gdb and pdb debuggers. The debugger output is redirected to a Vim window, the console. The debugger commands are m...

バージョン2.0より前では、Windowsでも動いていたらしいです。今ではインストール用のバイナリも削除され、無理やりインストールしてみましたがちゃんと動きませんでした。

vimpdb(GoogleCode)

普通に使えばちゃんと動きます。ただ、マルチプロセス等をしようすると簡単にVimが落ちます。

gotcha/vimpdb

デバッガーとしてVimが立ち上がるコードが入力できるようになります。Vimからデバッガーを起動する挙動ではないので、なんだかなーっといった感じ。

Eclim

VimからEclipseを操作できるようになるwrapperといった感じ。これが一番現実的です。Vim上からEclipseのプロジェクト管理ができるようになるので、これで開発を進めつつ、必要に慣ればEclipse上でデバッグするというのが一番効率が良い気がします。

まとめ

これで、だいたいの欲しい機能は実装できました。コードを書いてF11で実行してテスト、必要に慣れば、Eclipse上からデバッグするというのが良さそうです。良い快適なVim Lifeを!

あとがき

Vimmerとしてはまだまだnewbieなので、ぜひ先輩方からアドバイスをいただきたく、記事にしてみました。間違っているところや、もっと良い環境の構築方法がありましたら、ぜひご教示いただければ嬉しいです!

最終的な.vimrcファイル

set encoding=utf-8
syntax on
set shiftwidth=4
set autoindent
set expandtab
set tabstop=4
set softtabstop=4
set number
set backspace=indent,eol,start
imap <C-V> <C-R>+
vmap <C-C> "+y
filetype plugin indent on

set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" let Vundle manage Vundle
" required! 
Bundle 'gmarik/vundle'

Bundle 'altercation/vim-colors-solarized'
Bundle 'davidhalter/jedi-vim'
Bundle 'bronson/vim-trailing-whitespace'
Bundle 'airblade/vim-gitgutter'
Bundle 'kevinw/pyflakes-vim'
Bundle 'Shougo/neocomplete.vim'
Bundle 'scrooloose/nerdtree'
Bundle 'bling/vim-airline'
Bundle 'thinca/vim-quickrun'
Bundle 'kien/ctrlp.vim'
Bundle 'ivanov/vim-ipython'

" The bundles you install will be listed here

" The rest of your config follows here

augroup vimrc_autocmds
    autocmd!
    " highlight characters past column 120
    autocmd FileType python highlight Excess ctermbg=DarkGrey guibg=Black
    autocmd FileType python match Excess /%120v.*/
    autocmd FileType python set nowrap
    augroup END

set laststatus=2
let g:airline#extensions#tabline#enabled = 1
let g:airline_theme             = 'powerlineish'

" -- solarized personal conf
set background=dark
try
    colorscheme solarized
catch
endtry

if (exists('+colorcolumn'))
    set colorcolumn=100
    highlight ColorColumn ctermbg=9
endif

" To allow jedi and neocomp activated together
autocmd FileType python setlocal omnifunc=jedi#completions

let g:jedi#auto_vim_configuration = 0

if !exists('g:neocomplete#force_omni_input_patterns')
        let g:neocomplete#force_omni_input_patterns = {}
endif

let g:neocomplete#force_omni_input_patterns.python = 'hw*|[^. t].w*'

map <F2> :NERDTreeToggle<CR>
nnoremap <F11> :QuickRun<CR>

let g:quickrun_config = {
   "_" : {
       "outputter/buffer/split" : ":botright",
       "outputter/buffer/close_on_empty" : 1
   },
}

nnoremap <expr><silent> <C-c> quickrun#is_running() ? quickrun#sweep_sessions() : "<C-c>"

参考リンク集

Using Vim as a Python IDE
はてブ数
About one year ago, I have switched to using Vim as my main text and code editor. Before that, I was using Emacs, but never really master...
Vim as a Python IDE – Unlogic
はてブ数
I’ve been spending quite a bit of time with our good old buddy Python recently, and when I do, I always invite along our mutual friend Vim.

コメント

  1. LIN WEI より:

    If you are using vim 8 / neovim, maybe you can try asyncrun: https://github.com/skywind3000/asyncrun.vim as a replacement to quickrun with better user experience and expansibility.

タイトルとURLをコピーしました