LoginSignup
5
7

More than 5 years have passed since last update.

Windows 10にGVimベースのPython開発環境を構築する(2)基本設定編

Last updated at Posted at 2016-03-01

はじめに

Windows 10, 64 bitビットPCにGVimベースのPython開発環境を構築します.第1回では,GVimを動作させるために必要な環境をインストールしました.第2回ではGVimの基本的な設定を行っていきます.

GVim設定ファイル用のGitHubレポジトリの作成

前回の記事では,GVimの設定ファイルをローカルに作成したGitレポジトリ内に作成しました.しかし,この方法は,他のPCでも同じ設定を利用しようとするときに,あまり良い方法ではありませんでした.今回は,GitHub上に設定ファイルレポジトリを作り,それをクローンすることにします.まずは,前回作成したレポジトリC:\Users\daizu\AppData\Local\vim74-daizu\vimfilesを削除します.次に,GitHubの自アカウントのページを開き,新規にvimfilesレポジトリを作成します.このレポジトリをPCにクローンします.今回は,ホームディレクトリ直下に設定ファイルを置くことにします.コマンドプロンプトを開き,C:\Users\daizuに移動した後に,

$ git clone https://github.com/daizutabi/vimfiles

とします.ホームディレクトリC:\Users\daizu の下に,vimfilesディレクトリが作成されました.このディレクトリ下にdotfilesディレクトリを作成し,その中に_vimrc_gvimrcという名前でファイルを作成します.そして,これらをホームディレクトリにリンクします. 管理者権限でコマンドプロンプトを開き,

$ mklink c:\Users\daizu\_vimrc c:\Users\daizu\vimfiles\dotfiles\_vimrc
$ mklink c:\Users\daizu\_gvimrc c:\Users\daizu\vimfiles\dotfiles\_gvimrc

とします.

_gvimrc

_gvimrcの設定を以下に記載します.

[フォント] guifontwideに等幅の日本語フォントを設定すると,表示がきれいになります.

set guifont=Consolas:h10
set guifontwide=IPAGothic:h10

[カーソルの色] IMEがONのときにカーソルの色を変更すると,現在の入力モードが判別しやすくなります.同時に,個人的な好みですが,カーソルの点滅をOFFにします.

highlight CursorIM guifg=NONE guibg=#00DD00
set guicursor=a:blinkon0

[ツールバー・メニューバー] 邪魔なので表示しません.

set guioptions-=T
set guioptions-=m

_vimrc

試行錯誤中です.基本的なVimの設定やNeobundleを使ったプラグインの使用方法など,ネットの情報をかき集めて現状はこのようになっています.

以下,つまづいた点を紹介したいと思います.

[Quickrun]
Pythonで日本語を含む文字列を出力すると文字化けするので,次のように設定しました.(他に,環境変数PYTHONIOENCODINGutf-8に設定する方法もあります.が,いろいろ副作用もあるので,下記のような対応をとっています.)

_vimrc
let g:quickrun_config = {
\   '_' : {
 <<< 中略 >>>
\       'hook/output_encode/enable' : 1,
\       'hook/output_encode/encoding' : 'cp932',
\   },
\}

[Python実行環境]
Pythonファイルの実行は,Quickrunで行います.ただし,普通にスクリプトとして実行したい場合もあれば,テストやDoctestを実行したい場合もあります.そこで,次のように,g:quickrun_configを設定しました.

let g:quickrun_config['python'] = {
\   'command' : 'python',
\   'outputter/buffer/filetype' : 'python_result'
\}
let g:quickrun_config['python.pytest.doctest'] = {
\   'command' : 'py.test',
\   'cmdopt' : '--doctest-modules',
\   'tempfile': '$HOME/.vim/temp/__tmp__.py',
\   'outputter/buffer/filetype' : 'doctest_result'
\}
let g:quickrun_config['python.nose.doctest'] = {
\   'command' : 'nosetests',
\   'cmdopt' : '--with-doctest',
\   'tempfile': '$HOME/.vim/temp/__tmp__.py',
\   'outputter/buffer/filetype' : 'doctest_result'
\}
let g:quickrun_config['python.pytest'] = {
\   'command' : 'py.test',
\   'cmdopt' : '-s -v',
\   'tempfile' : '$HOME/.vim/temp/__tmp__.py',
\   'outputter/buffer/filetype' : 'pytest_result'
\}

保存していない編集中のファイルをQuickrunにかけると,デフォルトでは拡張子が.tmpであるテンポラリファイルが作成されて実行コマンドに渡されます.通常のPythonの実行では問題ないのですが,nose, pytestでは拡張子が.pyであることが必要なようなので,`tempfile`を明示的に指定しています.'outputter/buffer/filetype'を指定しているのは,あとからシンタックスカラーを使うためです.

Pythonファイル用の設定

vimfilesディレクトリ以下に,after/ftplugin/python.vimを作成してPythonファイルを編集するときの設定を記載します.現状では以下のようになっています.

setlocal completeopt-=preview
setlocal omnifunc=jedi#completions

nnoremap <silent> <buffer> <Leader>w :<C-u>WatchdogsRun<CR>
nnoremap <silent> <buffer> <Leader>tt :<C-u>Pytest file<CR>
nnoremap <silent> <buffer> <Leader>tf :<C-u>Pytest function<CR>
nnoremap <silent> <buffer> <Leader>tc :<C-u>Pytest class<CR>
nnoremap <silent> <buffer> <Leader>tm :<C-u>Pytest method<CR>
nnoremap <silent> <buffer> <Leader>tn :<C-u>QuickRun -type python.nose.doctest<CR>
nnoremap <silent> <buffer> <Leader>td :<C-u>QuickRun -type python.pytest.doctest<CR>
nnoremap <silent> <buffer> <Leader>tp :<C-u>QuickRun -type python.pytest<CR>
nmap <buffer> ,p <Plug>(operator-autopep8)
nmap <buffer> ,pp <Plug>Autopep8Line
nmap <buffer> <F8> <Plug>Autopep8Entire

盲点だったのが,

setlocal omnifunc=jedi#completions

です.これを_vimrcの中で

set omnifunc=jedi#completions

としてしまうと,_vimrcが読み込まれた時点では,正しく設定されているものの,Pythonファイルを開いた瞬間に,ファイルタイプごとに読み込まれるデフォルト設定で上書きされてしまいます.デフォルト設定を上書きするために,after/ftplugin/python.vim内でomnifuncを指定する必要があります.

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7