iPad / iPad Pro / iPhone 上で利用可能なVimアプリ iVim 。
こちらを Python統合開発環境(IDE)として利用する方法を紹介します。
IDE機能とVimプラグイン
IDEに求められる機能は非常に沢山ありますが、iVim ではこちらで実現することにしました。
機能 | Vimプラグイン | Pythonモジュール/コマンド |
---|---|---|
文法チェック 入力補完 | vim-lsp async.vim asyncomplete.vim asyncomplete-lsp.vim | pyls |
フォーマッター | vim-autopep8 vim-isort | autopep8 isort |
テストフレームワーク | – | unittest pytest |
デバッガ | – | pdb |
ファイラ | NERDTree | – |
各種検索 | Unite | – |
自動補正 補正支援 | vim-better-whitespace vim-surround indentLine vim-anzu vim-commentary vim-highlightedyank | – |
カーソル移動支援 | vim-anzu vim-easymotion | – |
スクリプト実行 | vim-quickrun | – |
テンプレート スニペット | vim-sonictemplate ultisnips | |
セッション管理 | vim-startify |
好みや過不足があると思いますが、色んな条件を乗り越えた結果でこうなりました。
iVimのIDE化する手順
Pythonモジュール
iVim を起動した後、次の内容のファイル ~/requirements.txt を作成します。
appdirs
attrs
autopep8
certifi
chardet
entrypoints
filelock
flake8
future
idna
importlib-metadata
isort
jedi
mccabe
more-itertools
packaging
parso
pluggy
py
pycodestyle
pyflakes
pyparsing
pytest
python-jsonrpc-server
python-language-server
requests
six
urllib3
virtualenv
wcwidth
zipp
Exコマンドなら、こちらでインストールします。
:!pip install ~/requirements.txt
こちらのコマンド一発でインストールできるはずですが、バージョンに寄ってはエラーが出る場合があります。
その場合はバージョンを一つ下げたモジュールを個別にインストールする必要があります。
Vim プラグインのインストール
iVimの設定
~/dotfiles/vimrc を作成して、次のように記載します。
" ==============================================================================
" = iVim Settings ==============================================================
" ==============================================================================
" => General ===================================================================
set history=500
" Enable filetype plugins
filetype plugin on
filetype indent on
" => VIM user interface ========================================================
set number
set ruler
set hid
set backspace=eol,start,indent
set whichwrap+=<,>,h,l
set ignorecase
set smartcase
set hlsearch
set incsearch
set lazyredraw
set magic
set showmatch
set mat=2
set showcmd
set wrapscan
set matchtime=3
set list
set autoindent
set hidden
set ttyfast
set cursorline
set cursorcolumn
set colorcolumn=80
" No annoying sound on errors
set noerrorbells
set novisualbell
set t_vb=
set tm=500
set belloff=all
set vb t_vb=
" => Colors and Fonts ==========================================================
colorscheme molokai
set t_Co=256
set encoding=utf8
set ffs=unix,dos,mac
set fileencoding=utf-8
set fileencodings=utf-8,iso-2022-jp,euc-jp,sjis
set guifont=HackGen-Regular.ttf:h20
" => Files, backups and undo ===================================================
set noswapfile
set nobackup
set nowb
" => Text, tab and indent related ==============================================
set expandtab
set smarttab
set shiftwidth=4
set tabstop=4
set softtabstop=0
set lbr
set tw=500
set ai
set si
set wrap
set helplang=ja
" => Status line & Tab line ====================================================
set laststatus=2
set cmdheight=3
set showtabline=2
set guioptions-=e
" => Custom Key Mappings =======================================================
let mapleader = ","
" Moving windows
nnoremap <C-j> <C-W>j
nnoremap <C-k> <C-W>k
nnoremap <C-h> <C-W>h
nnoremap <C-l> <C-W>l
" Like windows keymapping
inoremap <C-v> <C-r>*
inoremap <C-e> <End>
vnoremap <C-C> "+y
nnoremap <C-a> ggVG
nnoremap <C-e> <End>
" Tab control
nnoremap <C-t> :tabe<cr>
nnoremap <C-tab> :tabnext<cr>
nnoremap <C-S-tab> :tabprevious<cr>
nnoremap <silent><Leader><S-S> :Startify<CR>
nnoremap <silent><Leader>b :call BufferList()<CR>
nnoremap <silent><Leader>f :MRU<CR>
nnoremap <silent><Leader>t :vert terminal<CR>
nnoremap <silent><Leader>v :source ~/.vimrc<CR>
nnoremap <silent><Leader>n :NERDTree<CR>
nnoremap <silent><Leader>m :put =execute('messages') "<CR>
" Input Back Slash (Only iVim)
inoremap ¥ \
" => Plugin ====================================================================
" Markdown
let g:vim_markdown_folding_disabled = 1
" QuickRun
let g:quickrun_config = {}
let g:quickrun_config.python = {'command': 'python3'}
" indentLine
let g:indentLine_setColors = 0
let g:indentLine_color_term = 239
" Language Server Protocol
if executable('pyls')
augroup vim_lsp_pyls
autocmd!
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'pyls',
\ 'cmd': {server_info->['pyls']},
\ 'whitelist': ['python'],
\ })
autocmd FileType python setlocal omnifunc=lsp#complete
augroup end
endif
set completeopt+=menuone
function! s:on_lsp_buffer_enabled() abort
setlocal omnifunc=lsp#complete
setlocal signcolumn=yes
nmap <buffer> gd <plug>(lsp-definition)
nmap <buffer> <f2> <plug>(lsp-rename)
endfunction
augroup lsp_install
au!
autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
augroup END
" Unite
let g:unite_enable_start_insert=1
let g:unite_source_history_yank_enable =1
let g:unite_source_file_mru_limit = 200
nnoremap <silent> ,uy :<C-u>Unite history/yank<CR>
nnoremap <silent> ,ub :<C-u>Unite buffer<CR>
nnoremap <silent> ,uf :<C-u>UniteWithBufferDir -buffer-name=files file<CR>
nnoremap <silent> ,ur :<C-u>Unite -buffer-name=register register<CR>
nnoremap <silent> ,uu :<C-u>Unite ultisnips<CR>
nnoremap <silent> ,ui <Plug>(unite_insert_enter)
au FileType unite nnoremap unite#do_action('split') " ウィンドウを分割して開く
au FileType unite inoremap unite#do_action('split')
" Subversive
nmap <leader>s <plug>(SubversiveSubstituteRange)
xmap <leader>s <plug>(SubversiveSubstituteRange)
nmap <leader>ss <plug>(SubversiveSubstituteWordRange)
" UltiSnips
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-b>"
let g:UltiSnipsJumpBackwardTrigger="<c-z>"
let g:UltiSnipsEditSplit="vertical"
let g:UltiSnipsSnippetDirectories=[ 'UltiSnips',expand('~/.vim/UltiSnips/')]
" => My Defined Commands =======================================================
command! -nargs=+ PlugInstall :!python3 ~/bin/pluginInstall.py <args>
command! -nargs=+ PlugRemove :!python3 ~/bin/pluginRemove.py <args>
command! -nargs=1 Opvimgrep :vimgrep /<args>/g % | cw
nnoremap <Leader>g :Opvimgrep
"===============================================================================
そして、.vimrc は次のように記載します。
source ~/dotfiles/vimrc
正常に作業完了した後は、iVim を再起動します。このとき、サスペンド(:qで終わらせただけ)から復帰するときでも設定は全て読み込み直してくれるます。
ただし、寄付をした場合には、次の設定値になっている必要がある点は注意です。
iVim環境は少し厳しい
そうは言っても、iVim には次の問題があって解消できないのが実情です。
- ソフトウェアキーボードでは操作性が悪い
- Gitコマンドがない(使えない)
- make / gmake ほか開発系プログラムが使えない
- インストールできないPythonモジュールがある
- Python / Vim script 以外の処理系が使えない
それでも iPad の高いモバイル性能のは、捨てがたい物がある魅力的です。
理想的な iPad + iVim の作業環境を整える
こちらの iPadシリーズとキーボードとの組み合わせで利用できます。iPad Air や iPad mini でも良いですが、個人的には中途半端だなと感じます。低コストさを追求して iPad、本気で利用したいなら iPad Proでの作業をオススメします。
iPad Pro12.9インチ + Magic Keyboard
12.9インチなら大画面で利用できて、作業効率が上がります。
iPad Pro11インチ + Magic Keyboard
モバイルを考えるなら、この組み合わせが使いやすいです。
iPad Air + Magic Keyboard
軽くて Touch IDが使えるタブレット端末としては最強です。
iPad + Smart Keyboard folio
低価格さと使いやすさでは最強かもしれません。
タブレットスタンド
個人的には次のスタントの組み合わせがオススメです。長時間作業の疲れがぜんぜん違いますね。
使い方に併せた機器を充実させて、楽しい iVim ライフをお送りください。