いつもIDE(NetBeans)で開発を行っていましたが、vimかっこいい、使えるようになりたいと思ったので、
とりあえずプラグイン入れてなんかそれっぽくできるようにしていった時の備忘録です。
ちなみに私のvimスキルは、入力とか移動とか検索くらいしかできない、まったくvimを使いこなせていない感じの人です。
vimのバージョンを8以上・luaオプション付きにする
プラグインによって上記条件を満たしていたほうが良い場合があるため
# とってくるsudo curl -L https://copr.fedorainfracloud.org/coprs/unixcommunity/vim/repo/epel-7/unixcommunity-vim-epel-7.repo -o /etc/yum.repos.d/unixcommunity-vim-epel-7.repo
# アップデート
yum update vim*# バージョン確認
vim --version# luaが有効か確認(-lua となっていたら無効、 +luaとなっていたら有効)
vim --version | grep lua
参考:CentOS 7 に vim 8 を導入する方法 : パパは家族の長男 ~都会暮らしを楽しく生きたい~
dein.vimインストール
プラグインマネージャーにdeinを使用する
* Shougo/dein.vim
# 任意のディレクトリで
curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
# インストールするディレクトリ作成(名前任意)mkdir-p ~/.vim/dein
# インストール# ここで出力されたスクリプトを、.vimrcに張り付け設定を記載する
sh ./installer.sh ~/.vim/dein
# これはもういらないので削除rm ./installer.sh
.vimrcを編集
先ほどdeinをインストールした際に出力されたものを、.vimrc
に張り付けてここに使用したいプラグインを記載していく。
基本は出力されたものそのまま使用したが、以下だけ修正。
- ホームディレクトリのパスを環境変数に変更
- インストールされていないものは自動インストールされるようにコメントアウト外す
"dein Scripts-----------------------------if&compatible
set nocompatible " Be iMproved
endif" Required:set runtimepath+=$HOME/.vim/dein/repos/github.com/Shougo/dein.vim" Required:if dein#load_state('$HOME/.vim/dein')call dein#begin('$HOME/.vim/dein')" Let dein manage dein" Required:call dein#add('$HOME/.vim/dein/repos/github.com/Shougo/dein.vim')" 追加したいプラグインをここに記載" こんな感じで↓call dein#add('scrooloose/nerdtree')" Required:call dein#end()call dein#save_state()endif" Required:filetype plugin indent on
syntax enable
" インストールされていないものは自動インストールするif dein#check_install()call dein#install()endif"End dein Scripts-------------------------
とりあえず今はこれだけ覚えておく
プラグイン追加
call dein#add('scrooloose/nerdtree')
もし、「やっぱこれ使わない」と思ったら、これ消しちゃえば無効になる(インストールした本体削除したい場合は別途操作必要)
追加したプラグインをインストール
vimを起動すれば、勝手にインストールしてくれる。
これでプラグイン入れてく準備完了
よし、いろいろ入れていくぞ
先に、設定を終えた.vimrcはこちら
NerdTree
こちらの設定をほぼ全部真似させていただきました。
[Vim Plugin] NERDTreeのオススメ設定とコマンド一覧 - KAMIYAのアレ
使用方法はまだよく分かっていないので、使いながら覚えていく
閉じ括弧補完
HTML関連
閉じタグ補完
letg:closetag_filenames='*.html,*.xhtml,*.php'letg:closetag_xhtml_filenames='*.xhtml,*.jsx'letg:closetag_filetypes='html,xhtml,php'letg:closetag_xhtml_filetypes='xhtml,jsx'letg:closetag_emptyTags_caseSensitive=1letg:closetag_shortcut='>'letg:closetag_close_shortcut='<leader>>'
>
を打ったら閉じタグを自動挿入されるが、1回消したりなんなりした時のために</
と打ったら対応する閉じタグを自動挿入してくれるっぽい設定も書いとく
augroup MyXML
autocmd!
autocmd Filetype xml inoremap <buffer></ </<C-x><C-o>
autocmd Filetype html inoremap <buffer></ </<C-x><C-o>
autocmd Filetype php inoremap <buffer></ </<C-x><C-o>
augroup END
対応するタグをハイライト
"オプション機能ONにするletg:mta_use_matchparen_group=1"使用するファイルタイプ(phpを追加)letg:mta_filetypes={ \'html':1, \'xhtml':1, \'xml':1, \'jinja':1, \'php':1, \}
コード補完
PHPの辞書ファイル作成
# 辞書ファイルを置いとく任意のフォルダ作成mkdir .vim/dictionary
# 作成
php -r'$f=get_defined_functions();echo join("\n",$f["internal"]);' | sort> .vim/dictionary/php.dict
参考:【vim】neobundle導入&neocomplcacheでPHP補完 - とあるプログラマの備忘録
または、スニペットファイルを作成
こちらのファイルを使用させていただいています。
https://qiita.com/tekkoc/items/8897cdf378305c4e547d
以下設定で辞書ファイルもスニペットファイルも指定していますが、
スニペットファイル指定しているなら辞書ファイルいらなそうだけど備忘録のために記載しています。
"----------------------------------------------------------" neosnippet-snippets"----------------------------------------------------------" Plugin key-mappings." Note: It must be "imap" and "smap". It uses <Plug> mappings." <C-k>で、TARGETのところへジャンプ
imap <C-k><Plug>(neosnippet_expand_or_jump)smap<C-k><Plug>(neosnippet_expand_or_jump)
xmap <C-k><Plug>(neosnippet_expand_target)" SuperTab like snippets behavior." Note: It must be "imap" and "smap". It uses <Plug> mappings."imap <expr><TAB>" \ pumvisible() ? "\<C-n>" :" \ neosnippet#expandable_or_jumpable() ?" \ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"smap<expr><TAB> neosnippet#expandable_or_jumpable() ?
\"\<Plug>(neosnippet_expand_or_jump)":"\<TAB>"" 独自スニペットファイルのあるディレクトリを指定letg:neosnippet#enable_snipmate_compatibility =1letg:neosnippet#snippets_directory=$HOME.'/.vim/dein/vim-neosnippets/'" For conceal markers.if has('conceal')set conceallevel=2 concealcursor=niv
endif"----------------------------------------------------------" neocomplete.vim"----------------------------------------------------------"Note: This option must be set in .vimrc(_vimrc). NOT IN .gvimrc(_gvimrc)!" Disable AutoComplPop.letg:acp_enableAtStartup=0" Use neocomplete.letg:neocomplete#enable_at_startup =1" Use smartcase.letg:neocomplete#enable_smart_case =1" Set minimum syntax keyword length.letg:neocomplete#sources#syntax#min_keyword_length =3" 辞書ファイルを設定(phpを追加)letg:neocomplete#sources#dictionary#dictionaries ={ \'default':'', \'php': $HOME.'/.vim/dein/php.dict' \}" Define keyword.if!exists('g:neocomplete#keyword_patterns')letg:neocomplete#keyword_patterns ={}endifletg: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 xml setlocal omnifunc=xmlcomplete#CompleteTags
autocmd FileType php setlocal omnifunc=phpcomplete#CompletePHP
" Enable heavy omni completion.if!exists('g:neocomplete#sources#omni#input_patterns')letg:neocomplete#sources#omni#input_patterns ={}endifletg:neocomplete#sources#omni#input_patterns.php ='[^. \t]->\h\w*\|\h\w*::'
設定はほとんど公式READMEをコピペです。辞書ファイルのパス・スニペットファイルのパスは設定して、
必要なさそうなのは消し、よく分からないものは残しました。
Git関連
HEADとの差分があるところを分かるようにする
" 記号更新のタイミングを早くするset updatetime=250" 行に対するハイライトを有効にする場合はこちらをletg:gitgutter_highlight_lines=1
参考:Vimメモ : vim-gitgutterで差分を左端に表示する - もた日記
いろいろできるやつ
これは:Gdiff
で差分を確認したもの。vim上でgitのあれやこれやができる
参考:VimmerなGit使いはfugitive.vimを今すぐ入れたほうがいい - SELECT * FROM life;
その他
自動インデントを外したい
dein.vim
内の、以下をoffにする(onで元通り)
" Required:filetype plugin indent off
とりあえず終わる
まだまだいろいろ足りないので、随時直していきたい