読者です 読者をやめる 読者になる 読者になる

pikesaku’s blog

個人的なプログラム勉強メモです。記載内容について一切の責任は持ちません。

vimでのPython開発環境構築

環境

RHEL7


機能

vimpythonスクリプトを扱う時だけ以下機能を実装する。

  • autopep8でソースの自動修正
  • F5キーでソースを実行する
  • 補完機能

参考URLで勉強したポイント

 : set runtimepath

 例) RHEL7の実行結果

 runtimepath=~/.vim,/usr/share/vim/vimfiles,/usr/share/vim/vim74,/usr/share/vim/vimfiles/after,~/.vim/after
  • ビルトインのftpluginは以下コマンドで確認が可能
 # find /usr/share/vim/vimfiles /usr/share/vim/vim74 /usr/share/vim/vimfiles/after | egrep ftplugin

 /usr/share/vim/vim74/ftplugin/python.vim

  • ビルトインに機能を追加したい時は、afterディレクトリに追加機能を記述したファイルを配置する。

 ~/.vim/after(特定ユーザー対象)
 /usr/share/vim/vimfiles/after(全ユーザー対象)

  • vimのキーマップ割り当てを変更する場合は、キーマップ変更コマンドを設定ファイルに記述する。

 例)今回使うキーマップ変更コマンド

 nmap <F5> :!python %

 →F5キーを押したらコード実行する為のコマンドが自動入力される。エンターキーを実行したら実行される。キーマップ変更コマンドにを追加すると即実行。

 nnoremap <S-f> :call Autopep8()<CR>

 →Shift+fを押すとautopep8コマンドによりソースの自動修正がされる。

  • キーマップ変更コマンドは、モード・再割当(remap)の有無により異なる。

 nmapはノーマルモードで再割当有
 nnoremapはノーマルモードで再割当無
 vmapはビジュアルモードで再割当有
 vnoremapはビジュアルモードで再割当無
 ※他モードのコマンドについては、参考URL参照

  • 再割当(remap)の有無の違いは、キー割当設定時に独自定義のキー割当変更を利用するかどうか

 例) F1キーを押すとインサートモードになる設定がある状況。(デフォルトではF1キーを押すとhelpが表示される)
 ※vimで以下を実行

 :map <F1> i

 bキーを押すとF1キーを押した処理が実行される設定を、再割当(remap)有で設定した場合
 ※vimで以下を実行

 :map b <F1>

 →bキーを押すとインサートモードになる。(再帰的に変更を有効化している)

 上記設定を、再割当(remap)無で設定した場合
 ※vimで以下を実行

 :noremap b <F1>

 →bキーを押すとヘルプが表示される。

  • キー割当を調べたい時は、helpコマンドを使う

例) F1キーを調べる場合

 :help <F1>

環境構築手順

① 補完機能を有効化する為、以下URLからパッケージをインストール

Welcome to the RPM repository on fr2.rpmfind.net

python-jedi
vim-jedi

上記を検索して新しいものを使う。

今回は、以下でインストール

# wget ftp://195.220.108.108/linux/fedora/linux/releases/24/Everything/x86_64/os/Packages/p/python-jedi-0.9.0-4.fc24.noarch.rpm
# wget ftp://195.220.108.108/linux/fedora-secondary/releases/24/Everything/ppc64/os/Packages/v/vim-jedi-0.8.0-1.fc24.noarch.rpm  
# rpm -ivh ./vim-jedi-0.8.0-1.fc24.noarch.rpm ./python-jedi-0.9.0-4.fc24.noarch.rpm

vimにjedi機能を追加する方法は、色々参考情報があったが手順も多く、自分には理解できないレベルでした。。。なのでrpmで逃げる。


② autopep8をインストール

# pip install autopep8                                                                                                                          


vimのftplugin設定

myvim/python.vim at master · AtsushiSakai/myvim · GitHub
上記サイトのファイルを丸々流用

以下コマンドを実行

# cat <<HERE > /root/.vim/after/ftplugin/python.vim
" vim configuration for python
" Author: Atsushi Sakai

" <F5>で編集中のファイルを実行
" MATLABと同じショートカット
nmap <F5> :!python %
" windows"
"nmap <F5> :!python %<CR>

" autopep 
" original http://stackoverflow.com/questions/12374200/using-uncrustify-with-vim/15513829#15513829
function! Preserve(command)
    " Save the last search.
    let search = @/
    " Save the current cursor position.
    let cursor_position = getpos('.')
    " Save the current window position.
    normal! H
    let window_position = getpos('.')
    call setpos('.', cursor_position)
    " Execute the command.
    execute a:command
    " Restore the last search.
    let @/ = search
    " Restore the previous window position.
    call setpos('.', window_position)
    normal! zt
    " Restore the previous cursor position.
    call setpos('.', cursor_position)
endfunction

function! Autopep8()
    "--ignote=E501: 一行の長さの補正を無視"
    call Preserve(':silent %!autopep8 --ignore=E501 -')
endfunction

" Shift + F でautopep自動修正
nnoremap <S-f> :call Autopep8()<CR>
HERE