2016/08/08(月) [n年前の日記]
#4 [raspberrypi][ubuntu][python] Vimを設定その2
vim でプラグインを管理するなら NeoBundle ではなく dein を使うのがこれからのトレンド、という話になってるらしいので、昨日 NeoBundle で環境を作ったばかりだけど dein に移行してみたり。
環境は以下。
環境は以下。
- Windows10 x64 + VMware + Ubuntu 16.04 LTS
- Raspberry Pi3 (Raspbian Jessie?)
◎ deinを導入。 :
_dein.vimのインストール自体にハマってしまったメモ - Qiita
を参考にして作業。
今まで設定した ~/.vimrc をリネームバックアップしてから中身をクリア。
dein をインストール。git が必要なので、sudo pat-get install git で事前に入れておく。
インストール直後に「以下の記述を ~/.vimrc に書け」とメッセージが表示されるので、~/.vimrc にコピペ。ただし、各環境に合わせた内容が表示されるので、巷の解説ページのソレをコピペするのではなく、インストールスクリプトが表示した内容をコピペすること。
注意点。最後のあたりの3行のコメントアウトを外しておく。ココを外しておかないと、各プラグインがインストールされない。
vimを起動すると自動でプラグインをインストールしてくれる。
dein を使っていて、各プラグインを無効にしたい際は…。よく分かってないけど、~/.vimrc の該当行をコメントアウト等した後で、vim を起動後、以下を打ったりすれば反映されるらしい。
今まで設定した ~/.vimrc をリネームバックアップしてから中身をクリア。
cp ~/.vimrc ~/.vimrc.old rm ~/.vimrc touch ~/.vimrc
dein をインストール。git が必要なので、sudo pat-get install git で事前に入れておく。
mkdir ~/.cache/dein cd ~/.cache/dein curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh sh ./installer.sh ~/.cache/deinインストール場所は色々な事例があるらしいけど…。ひとまず ~/.cache/dein にしてみたり。
インストール直後に「以下の記述を ~/.vimrc に書け」とメッセージが表示されるので、~/.vimrc にコピペ。ただし、各環境に合わせた内容が表示されるので、巷の解説ページのソレをコピペするのではなく、インストールスクリプトが表示した内容をコピペすること。
"dein Scripts----------------------------- if &compatible set nocompatible " Be iMproved endif " Required: set runtimepath^=/home/mieki256/.cache/dein/repos/github.com/Shougo/dein.vim " Required: call dein#begin(expand('/home/mieki256/.cache/dein')) " Let dein manage dein " Required: call dein#add('Shougo/dein.vim') " Add or remove your plugins here: call dein#add('Shougo/neosnippet.vim') call dein#add('Shougo/neosnippet-snippets') " You can specify revision/branch/tag. call dein#add('Shougo/vimshell', { 'rev': '3787e5' }) " Required: call dein#end() " Required: filetype plugin indent on " If you want to install not installed plugins on startup. if dein#check_install() call dein#install() endif "End dein Scripts-------------------------
注意点。最後のあたりの3行のコメントアウトを外しておく。ココを外しておかないと、各プラグインがインストールされない。
"if dein#check_install() " call dein#install() "endif ↓ if dein#check_install() call dein#install() endif
vimを起動すると自動でプラグインをインストールしてくれる。
dein を使っていて、各プラグインを無効にしたい際は…。よく分かってないけど、~/.vimrc の該当行をコメントアウト等した後で、vim を起動後、以下を打ったりすれば反映されるらしい。
:call dein#clear_state() :call dein#update()どういう意味のコマンドなのかよく分かってない。
◎ Python2.x対応のVimを選ぶ。 :
jedi-vim なるプラグインを使うと、vim で Pythonスクリプトを書く時に色々補完してくれるらしい。導入を試みたい。
しかし、Ubuntu の場合、vim-gnome や vim-nox は Python3 が有効になっているので、jedi-vim が動いてくれないっぽい。Python2が有効になっている vim を使えば jedi-vim が動くようだけど、その場合は、vim-gnome-py2 や vim-nox-py2 をインストールしないといかんらしい。
ただ、インストールしただけでは py2版に切り替わらない。update-alternatives で、どの版を使うか選ぶ必要があるっぽい。
ちなみに、Raspberry Pi 上の vim-gnome は、Python2有効/Python3無効、でビルドされてた。UbuntuのようにPython3への移行をゴリ押ししてる状態ではない模様。
以下参考ページ。
_標準で使うコマンドを切り替えるコマンドalternativesを使ってみた - ケーズメモ
_Ubuntu 16.04 リリースノート 日本語訳 - Qiita
しかし、Ubuntu の場合、vim-gnome や vim-nox は Python3 が有効になっているので、jedi-vim が動いてくれないっぽい。Python2が有効になっている vim を使えば jedi-vim が動くようだけど、その場合は、vim-gnome-py2 や vim-nox-py2 をインストールしないといかんらしい。
sudo aptitude install vim-gnome-py2 sudo aptitude install vim-nox-py2
ただ、インストールしただけでは py2版に切り替わらない。update-alternatives で、どの版を使うか選ぶ必要があるっぽい。
$ sudo update-alternatives --config vim alternative vim (/usr/bin/vim を提供) には 3 個の選択肢があります。 選択肢 パス 優先度 状態 ------------------------------------------------------------ * 0 /usr/bin/vim.gnome 60 自動モード 1 /usr/bin/vim.basic 30 手動モード 2 /usr/bin/vim.gnome 60 手動モード 3 /usr/bin/vim.gnome-py2 59 手動モード 現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください:
$ sudo update-alternatives --display vim vim - 手動モード link best version is /usr/bin/vim.gnome リンクは現在 /usr/bin/vim.gnome-py2 を指しています link vim is /usr/bin/vim /usr/bin/vim.basic - 優先度 30 /usr/bin/vim.gnome - 優先度 60 /usr/bin/vim.gnome-py2 - 優先度 59
ちなみに、Raspberry Pi 上の vim-gnome は、Python2有効/Python3無効、でビルドされてた。UbuntuのようにPython3への移行をゴリ押ししてる状態ではない模様。
以下参考ページ。
_標準で使うコマンドを切り替えるコマンドalternativesを使ってみた - ケーズメモ
_Ubuntu 16.04 リリースノート 日本語訳 - Qiita
◎ jedi-vim をインストール。 :
Ubuntuの場合、apt-get でインストールできるらしいのだが…。
dein を導入した vim で、~/.vimrc に記述してインストールしてみる。以下を、call dein#begin と call dein#end の間に追加。
巷の解説記事によると、以下もしておく必要があるらしいので、一応しておく。
$ sudo aptitude search vim-python-jedi i vim-python-jedi - autocompletion tool for Python - VIM addon files $ sudo aptitude install vim-python-jediインストール出来てるのかどうか、よく分からない。
dein を導入した vim で、~/.vimrc に記述してインストールしてみる。以下を、call dein#begin と call dein#end の間に追加。
call dein#add('davidhalter/jedi-vim')vim を起動したらインストールされたっぽい。
巷の解説記事によると、以下もしておく必要があるらしいので、一応しておく。
cd ~/.cache/dein/repos/github.com/davidhalter/jedi-vim/jedi/ git submodule update --init
◎ dein と jedi-vim を使った場合の ~/.vimrc。 :
以下のような ~/.vimrc になった。
長い…。
"dein Scripts----------------------------- if &compatible set nocompatible " Be iMproved endif " Required: set runtimepath^=/home/mieki256/.cache/dein/repos/github.com/Shougo/dein.vim " Required: call dein#begin(expand('/home/mieki256/.cache/dein')) " Let dein manage dein " Required: call dein#add('Shougo/dein.vim') " Add or remove your plugins here: call dein#add('Shougo/neosnippet.vim') call dein#add('Shougo/neosnippet-snippets') call dein#add('tpope/vim-fugitive') call dein#add('ctrlpvim/ctrlp.vim') call dein#add('flazz/vim-colorschemes') call dein#add('Shougo/neocomplete.vim') call dein#add('davidhalter/jedi-vim') " call dein#add('Townk/vim-autoclose') " You can specify revision/branch/tag. call dein#add('Shougo/vimshell', { 'rev': '3787e5' }) " Required: call dein#end() " Required: filetype plugin indent on " If you want to install not installed plugins on startup. if dein#check_install() call dein#install() endif "End dein Scripts------------------------- filetype plugin on set ignorecase set smartcase set incsearch set hlsearch set encoding=utf-8 set fileencoding=utf-8 set fileencodings=utf-8,cp932 " ---------------------------------------- "Note: This option must be set in .vimrc(_vimrc). NOT IN .gvimrc(_gvimrc)! " Disable AutoComplPop. let g:acp_enableAtStartup = 0 " Use neocomplete. let g:neocomplete#enable_at_startup = 1 " Use smartcase. let g:neocomplete#enable_smart_case = 1 " Set minimum syntax keyword length. let g:neocomplete#sources#syntax#min_keyword_length = 2 let g:neocomplete#lock_buffer_name_pattern = '\*ku\*' " Define dictionary. let g:neocomplete#sources#dictionary#dictionaries = { \ 'default' : '', \ 'vimshell' : $HOME.'/.vimshell_hist', \ 'scheme' : $HOME.'/.gosh_completions' \ } " Define keyword. if !exists('g:neocomplete#keyword_patterns') let g:neocomplete#keyword_patterns = {} endif let g:neocomplete#keyword_patterns['default'] = '\h\w*' " Plugin key-mappings. inoremap <expr><C-g> neocomplete#undo_completion() inoremap <expr><C-l> neocomplete#complete_common_string() " Recommended key-mappings. " <CR>: close popup and save indent. inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR> function! s:my_cr_function() return (pumvisible() ? "\<C-y>" : "" ) . "\<CR>" " For no inserting <CR> key. "return pumvisible() ? "\<C-y>" : "\<CR>" endfunction " <TAB>: completion. inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>" " <C-h>, <BS>: close popup and delete backword char. inoremap <expr><C-h> neocomplete#smart_close_popup()."\<C-h>" inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>" " Close popup by <Space>. "inoremap <expr><Space> pumvisible() ? "\<C-y>" : "\<Space>" " AutoComplPop like behavior. "let g:neocomplete#enable_auto_select = 1 " Shell like behavior(not recommended). "set completeopt+=longest "let g:neocomplete#enable_auto_select = 1 "let g:neocomplete#disable_auto_complete = 1 "inoremap <expr><TAB> pumvisible() ? "\<Down>" : "\<C-x>\<C-u>" " Enable omni completion. autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS autocmd FileType python setlocal omnifunc=pythoncomplete#Complete autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags " Enable heavy omni completion. if !exists('g:neocomplete#sources#omni#input_patterns') let g:neocomplete#sources#omni#input_patterns = {} endif "let g:neocomplete#sources#omni#input_patterns.php = '[^. \t]->\h\w*\|\h\w*::' "let g:neocomplete#sources#omni#input_patterns.c = '[^.[:digit:] *\t]\%(\.\|->\)' "let g:neocomplete#sources#omni#input_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)\|\h\w*::' " For perlomni.vim setting. " https://github.com/c9s/perlomni.vim let g:neocomplete#sources#omni#input_patterns.perl = '\h\w*->\h\w*\|\h\w*::' " ---------------------------------------- " python setting autocmd FileType python setl autoindent autocmd FileType python setl smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class autocmd FileType python setl tabstop=8 expandtab shiftwidth=4 softtabstop=4 " ---------------------------------------- " jedi-vim setting autocmd FileType python setlocal completeopt-=preview 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 = '\h\w*\|[^. \t]\.\w*' let g:jedi#goto_assignments_command = "<C-g>" let g:jedi#goto_definitions_command = "<C-d>"
長い…。
◎ 使用感。 :
VMware + Ubuntu 16.04 LTS では、この設定をしたvimもまだサクサク動いてるけど。Raspberry Pi3上では、vimの動作がちょっと厳しくなってきた。Pythonスクリプトを開いた際に、数秒ほど真っ暗な画面が表示される…。CPUパワーが無いので、解析に時間がかかってるのかもしれない。
ひょっとすると、Raspberry Pi3上では、jedi-vim は使わないほうがいいのかも。あるいは、メインPC上でエディタを使って書き換えるようにするか…。
ひょっとすると、Raspberry Pi3上では、jedi-vim は使わないほうがいいのかも。あるいは、メインPC上でエディタを使って書き換えるようにするか…。
[ ツッコむ ]
以上です。