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上でエディタを使って書き換えるようにするか…。
[ ツッコむ ]
以上です。