mieki256's diary



2016/08/08(月) [n年前の日記]

#4 [raspberrypi][ubuntu][python] Vimを設定その2

vim でプラグインを管理するなら NeoBundle ではなく dein を使うのがこれからのトレンド、という話になってるらしいので、昨日 NeoBundle で環境を作ったばかりだけど dein に移行してみたり。

環境は以下。

deinを導入。 :

_dein.vimのインストール自体にハマってしまったメモ - Qiita を参考にして作業。

今まで設定した ~/.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 をインストールしないといかんらしい。
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 でインストールできるらしいのだが…。
$ 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上でエディタを使って書き換えるようにするか…。

以上です。

過去ログ表示

Prev - 2016/08 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project