まえがき
Vimに初めて触れてから何年か経ちましたが、最初の頃はかなり苦戦しました。
少し編集したいだけなのに、挿入モードにしないと文字も打てないし、マウスのクリックも使えない><
色々不満がありながらもなぜ使い続けるのか、それはVimを使ってる先輩方が「Vim最高!」「Vim使ってるとモテるよ!」なんて言うからです。
この言葉を信じてなんとか頑張って使い続けてみましたが、Vimの基本操作を覚えただけでそんなに編集速度は上がりませんでした。くやしい!
結局何も考えずに先輩のvimrcをコピペしてから現在に至るが、やはり理解してないものを使い続けるのは気持ち悪いので、ゼロからvimrcを読み解いてみる。
やること
- vimrcの基本設定
- 文字コード
- タブ・インデント
- 文字列検索
- カーソル
- カッコ・タグジャンプ
- コマンド補完
- 特殊な設定
- マウスの有効化
- ペースト設定
- Vimプラグイン
- NeoBundle(Vimプラグインの管理)
- molokai(カラースキーム)
- lightline.vim(ステータスラインの表示内容強化)
- vim-trailing-whitespace(全角と半角の空白文字を可視化)
- indentLine(インデントの可視化)
- neocomplete・neosnippet・neosnippet-snippets(コードの自動補完)
- CtrlP(多機能セレクタ)
- Syntastic(構文エラーチェック)
対象となる読者
- 素のVimを使っていて、もっと快適にコードを書きたい人
- どこかのvimrcをコピペしてきて理解しないまま使い続けてる人
- Node.jsやJavascriptでコードを書いてる人
- モテたい人
- 強い力がほしい人
動作環境
- CentOS 7.1
- iTerm2 3.0.10
- Vim 7.4
最近Vimが8.0にバージョンアップされました。Vim8.0でも動作確認は出来ているので、最新のVim8.0を使っても大丈夫です。
vimrcとは
Q. そもそもvimrcとは何か?
A. vimの設定情報が書かれたファイルの事です。正式には「.vimrc」という名前で先頭にドットが付きます。
このvimrcファイルに色んな設定を記述することでVimが便利なものになっていきます。
設定方法
ユーザーのホームディレクトリ以下に.vimrcファイルを置きます。
そうすることで、Vimを起動した時に自動的に.vimrcファイルを読み込んでくれるようになります。
% touch ~/.vimrc
最初の設定
先ほど作成した空の.vimrcファイルは、今のままだと何も書かれていないので素のVimと同じ状態です。
まずはvimrcファイルの先頭に以下の設定を書きましょう。
setencoding=utf-8scriptencoding utf-8
1行目の「set encoding=utf-8」はファイル読み込み時の文字コードの設定
2行目の「scriptencoding utf-8」はVim Script内でマルチバイト文字を使う場合の設定
※ Vim Scriptにはvimrcファイルも含まれているので、日本語でコメントを書く場合は先頭にこの設定が必要になります。
この書き方については、こちらのページを参考にさせて頂きました。
→vimrcアンチパターン
文字コード
ここからは日本語のコメントをvimrcの中に書いていきます。
分かりづらい設定に関してはアニメーションGifで説明します。
setfileencoding=utf-8" 保存時の文字コードsetfileencodings=ucs-boms,utf-8,euc-jp,cp932 " 読み込み時の文字コードの自動判別. 左側が優先されるsetfileformats=unix,dos,mac " 改行コードの自動判別. 左側が優先されるsetambiwidth=double " □や○文字が崩れる問題を解決
set ambiwidth=doubleについて
以下を見れば分かると思いますが、□や◯文字が崩れているのが分かります。
↑設定前
↓設定後
※ iTerm2を使ってる場合は以下のように設定から「Treat ambiguous-width characters as double width」にチェックする必要がある
タブ・インデント
setexpandtab" タブ入力を複数の空白入力に置き換えるsettabstop=4" 画面上でタブ文字が占める幅setsofttabstop=4" 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅setautoindent" 改行時に前の行のインデントを継続するsetsmartindent" 改行時に前の行の構文をチェックし次の行のインデントを増減するsetshiftwidth=4" smartindentで増減する幅
こちらを参考にさせて頂きました。
→Vim のカスタマイズ 〜 タブ/インデントの設定 〜
文字列検索
setincsearch" インクリメンタルサーチ. 1文字入力毎に検索を行うsetignorecase" 検索パターンに大文字小文字を区別しないsetsmartcase" 検索パターンに大文字を含んでいたら大文字小文字を区別するsethlsearch" 検索結果をハイライト" ESCキー2度押しでハイライトの切り替えnnoremap<Esc><Esc> :<C-u>setnohlsearch!<CR>
検索ハイライトについて
検索した文字列がハイライトします。ESCキー2回でハイライト表示の切り替えが出来ます。
カーソル
setwhichwrap=b,s,h,l,<,>,[,],~" カーソルの左右移動で行末から次の行の行頭への移動が可能になるsetnumber" 行番号を表示setcursorline" カーソルラインをハイライト" 行が折り返し表示されていた場合、行単位ではなく表示行単位でカーソルを移動するnnoremapj gj
nnoremapk gk
nnoremap<down> gj
nnoremap<up> gk
" バックスペースキーの有効化setbackspace=indent,eol,start
カーソルラインについて
カーソルのある行がハイライトされる
※ マシンスペックが低かったりすると描画に時間が掛かりカーソル移動が遅くなる事があります。
その場合は無理して使う必要は無いので設定をオフにしてください。
カッコ・タグジャンプ
setshowmatch" 括弧の対応関係を一瞬表示する
source $VIMRUNTIME/macros/matchit.vim" Vimの「%」を拡張する
Vimの「%」拡張について
ノーマルモード時に「%」で対応するカッコにジャンプ出来ます。
「source $VIMRUNTIME/macros/matchit.vim」の設定は、Vimに同梱されているmatchitプラグインを有効化することで
HTMLタグやRubyのdef...end
なども%で対応するタグにジャンプすることが出来るようになります。
コマンド補完
setwildmenu" コマンドモードの補完sethistory=5000" 保存するコマンド履歴の数
set wildmenuについて
コマンドの補完を視覚的に分かりやすく表示してくれます。タブキーで次の選択候補に移れます。
マウスの有効化
以下の設定をすることで、マウスでカーソル移動やスクロール移動が出来るようになります。
if has('mouse')setmouse=aif has('mouse_sgr')setttymouse=sgr
elseifv:version>703||v:versionis703&& has('patch632')setttymouse=sgr
elsesetttymouse=xterm2
endifendif
ペースト設定
クリップボードから普通にペーストすると自動インデントが効いて下に行くほど右にずれていきますが、
以下の設定をすることで、クリップボードからペーストする時だけインデントしないようにしてくれます。
if&term=~"xterm"let&t_SI .="\e[?2004h"let&t_EI .="\e[?2004l"let&pastetoggle="\e[201~"function XTermPasteBegin(ret)setpastereturna:retendfunctioninoremap<special><expr><Esc>[200~ XTermPasteBegin("")endif
Vimプラグイン
Vimプラグインとは、Vimを便利にするための拡張機能の事です。
このVimプラグインを導入することでコードの自動補完が出来たり、見た目をかっこよくしたりなど、便利な機能を提供してくれます。
Vimプラグインは自分で自作することもできますが、既に便利なVimプラグインが世の中にたくさんあるので、
ここでは特に便利だと思ったものについて紹介しようと思います。
はじめに
Vimプラグインの導入方法ですが、vimrcの基本設定と同じく「.vimrc」ファイルに記述するだけです。
Vimプラグインの導入には「NeoBundle」という、Vimプラグインを管理するためのVimプラグインを使う方法がシンプルで簡単です。
NeoBundle(Vimプラグインの管理)
以下がNeoBundleの設定になります。細かい部分は①・②・③で見ていきます。
if has('vim_starting') " 初回起動時のみruntimepathにNeoBundleのパスを指定するsetruntimepath+=~/.vim/bundle/neobundle.vim/ " NeoBundleが未インストールであればgit cloneする・・・・・・①if!isdirectory(expand("~/.vim/bundle/neobundle.vim/"))
echo "install NeoBundle..."
:call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim")endifendifcall neobundle#begin(expand('~/.vim/bundle/'))" インストールするVimプラグインを以下に記述" NeoBundle自身を管理
NeoBundleFetch 'Shougo/neobundle.vim'"----------------------------------------------------------" ここに追加したいVimプラグインを記述する・・・・・・②"----------------------------------------------------------call neobundle#end()" ファイルタイプ別のVimプラグイン/インデントを有効にするfiletype plugin indent on" 未インストールのVimプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定・・・・・・③
NeoBundleCheck
① NeoBundleが未インストールであればgit cloneする
NeoBundleの設定をvimrcに記述しただけではまだNeoBundleは未インストール状態です。
記述したvimrcを保存後にもう一度vimを起ち上げるとNeoBundleのインストールが開始します。
② ここに追加したいVimプラグインを記述する
NeoBundleのインストールが①で完了しているので、追加したいVimプラグインを記述していきます。
下の例ではmolokaiとlightline.vimというVimプラグインを追加してます。この2つのVimプラグインは後で説明します。
Vimプラグインを追加する場合は、ここにどんどん記述していってください。
" インストールするVimプラグインを以下に記述" NeoBundle自身を管理
NeoBundleFetch 'Shougo/neobundle.vim'"----------------------------------------------------------" ここに追加したいVimプラグインを記述する・・・・・・②" カラースキームmolokai
NeoBundle 'tomasr/molokai'" ステータスラインの表示内容強化
NeoBundle 'itchyny/lightline.vim'"----------------------------------------------------------call neobundle#end()
③ 未インストールのVimプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定
②で追加したいVimプラグインを記述しましたが、この状態ではまだインストールされていない状態です。
①と同じくvimrcを保存後にもう一度vimを立ち上げると記述したVimプラグインをインストールするか訊ねてくれます。
キーボードから「y」とタイピングするとインストールが開始されます。
※Vimプラグインをたくさん記述すると、初回のインストール完了までに少し時間が掛かります。
その場合はdein.vimを入れると改善されると思います。→NeoBundle から dein.vim に乗り換えたら爆速だった話
molokai(カラースキーム)
カラースキームのmolokaiを追加するだけでエディタの配色がカラフルになり、コーディングのモチベーションが上がります。
※ Vimプラグインにはインストールするだけで有効になるものもありますが、少し設定を書かないといけないものもあります。
molokaiでは以下の設定をvimrcに記述してください。
"----------------------------------------------------------" インストール"----------------------------------------------------------" カラースキームmolokai
NeoBundle 'tomasr/molokai'"----------------------------------------------------------" molokaiの設定"----------------------------------------------------------if neobundle#is_installed('molokai')" molokaiがインストールされていればcolorscheme molokai " カラースキームにmolokaiを設定するendifsett_Co=256" iTerm2など既に256色環境なら無くても良いsyntax enable " 構文に色を付ける
set t_Co=256について
iTerm2を使ってるユーザーはこの設定は不要ですが、あっても問題無いので残しときます。
その代わりiTerm2の設定で256色に設定する必要があります。
※ 以下のように設定から「xterm-256color」を選択する。
※ molokai以外にもいろんなカラースキームがあります。自分に合ったお好みの配色を探してみてください
→Vim Colorscheme Gallery
lightline.vim(ステータスラインの表示内容強化)
lightline.vimはVimのステータスラインをかっこよくしてくれたり、編集してるファイルの詳細情報を表示してくれたりします。
lightline.vimはインストールするだけで使えますが、カスタマイズすると編集しているファイルのファイルパスを表示したり、Gitのブランチ名表示できたりします。
"----------------------------------------------------------" インストール"----------------------------------------------------------" ステータスラインの表示内容強化
NeoBundle 'itchyny/lightline.vim'"----------------------------------------------------------" lightline.vimの設定"----------------------------------------------------------setlaststatus=2" ステータスラインを常に表示setshowmode" 現在のモードを表示setshowcmd" 打ったコマンドをステータスラインの下に表示setruler" ステータスラインの右側にカーソルの位置を表示する
※ ステータスラインを強化する前に、ステータスラインを有効にする必要があるので、上記でその設定を行ってます。(lightline.vimの設定はデフォルトのままです)
vim-trailing-whitespace(全角と半角の空白文字を可視化)
vim-trailing-whitespaceはファイル中の行末尾にある半角空白と全角空白を赤くハイライトし可視化してくれます。
"----------------------------------------------------------" インストール"----------------------------------------------------------" 末尾の全角と半角の空白文字を赤くハイライト
NeoBundle 'bronson/vim-trailing-whitespace'
コード上ではこれらの空白文字は不要な場合が多いので、赤くハイライトされていたら削除するようにしましょう。
またコマンドモードから以下のコマンドを実行する空白文字を一気に削除してくれます。
:FixWhitespace
indentLine(インデントの可視化)
indentLineはファイル上のインデントを以下のように可視化してくれます。
"----------------------------------------------------------" インストール"----------------------------------------------------------" インデントの可視化
NeoBundle 'Yggdroot/indentLine'
neocomplete・neosnippet・neosnippet-snippets(コードの自動補完)
neocompleteはコードの自動補完を行うVimプラグインです。入力中のコードから推測して候補を出してくれます。
うろ覚えだった関数名や長い変数名を入力する必要は無く、途中まで入力したら補完候補から選択するだけです。
コーディングの速度が劇的に上がるので入れといて損は無いVimプラグインです。
またneocompleteはneosnippetと合わせるとさらに補完が強力になります。
neosnippetとは、スニペット補完の機能を提供してくれるVimプラグインです。
neosnippetプラグインだけだと自分でスニペットを自作しないといけませんが、neosnippet-snippetsを入れる事で便利なスニペットがたくさん使えるようになります。
以下はneocomplete・neosnippet・neosnippet-snippetsの設定になります。細かい部分は①・②・③で見ていきます。
"----------------------------------------------------------" インストール"----------------------------------------------------------if has('lua')" lua機能が有効になっている場合・・・・・・① " コードの自動補完
NeoBundle 'Shougo/neocomplete.vim' " スニペットの補完機能
NeoBundle "Shougo/neosnippet" " スニペット集
NeoBundle 'Shougo/neosnippet-snippets'endif"----------------------------------------------------------" neocomplete・neosnippetの設定"----------------------------------------------------------if neobundle#is_installed('neocomplete.vim') " Vim起動時にneocompleteを有効にするletg:neocomplete#enable_at_startup =1 " smartcase有効化. 大文字が入力されるまで大文字小文字の区別を無視するletg:neocomplete#enable_smart_case =1 " 3文字以上の単語に対して補完を有効にするletg:neocomplete#min_keyword_length =3 " 区切り文字まで補完するletg:neocomplete#enable_auto_delimiter =1 " 1文字目の入力から補完のポップアップを表示letg:neocomplete#auto_completion_start_length =1 " バックスペースで補完のポップアップを閉じるinoremap<expr><BS> neocomplete#smart_close_popup()."<C-h>" " エンターキーで補完候補の確定. スニペットの展開もエンターキーで確定・・・・・・②
imap <expr><CR> neosnippet#expandable() ? "<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "<C-y>" : "<CR>" " タブキーで補完候補の選択. スニペット内のジャンプもタブキーでジャンプ・・・・・・③
imap <expr><TAB> pumvisible() ? "<C-n>" : neosnippet#jumpable() ? "<Plug>(neosnippet_expand_or_jump)" : "<TAB>"endif
① lua機能が有効になっている場合
neocompleteプラグインはVimのlua機能によって動作しています。
ですので、lua機能が有効になっていないと使えないVimプラグインになります。
※ luaについての説明はここでは割愛させていただきます
lua機能が有効になってるか確認する方法
以下のコマンドを打ち「+lua」か「+lua/dyn」となっていれば有効になっています。「-lua」と表示されていたら無効です。
% vim --version | grep lua
+lua
luaの有効化
luaの有効化と言っても、既にインストールされているVimから有効化するのではなく、
有効化されているVimをインストールすることになります。
以下の手順でlua機能が有効化されているVimをインストールしましょう。
% sudo yum install ncurses-devel lua lua-devel
% git clone https://github.com/vim/vim.git
% cd vim/
% ./configure --with-features=huge --enable-multibyte --enable-luainterp=dynamic --enable-gpm --enable-cscope --enable-fontset
% make
% sudo make install
※ lua機能が有効化されたVimをインストール出来ない環境にある人は「neocomplete」の前身である「neocomplcache」を使えば似たような機能を使えます。
Vimプラグイン作成者が同じ人なので、以下の対応表を見てneocomplcache用の設定に書き換えてください。
→neocompleteとneocomplcacheの設定対応表
※ neocomplcacheに設定を変更したら以下の設定も不要になります。もしくはlua機能が無い場合で出し分けてもいいと思います。
if has('lua')
②エンターキーで補完候補の確定. スニペットの展開もエンターキーで確定
③タブキーで補完候補の選択. スニペット内のジャンプもタブキーでジャンプ
※ デフォルトのキーマッピングが自分に合わなかったのでこうしてます。
CtrlP(多機能セレクタ)
CtrlPはいわゆる多機能セレクタというやつで、ファイルの検索やバッファの検索などの機能を提供します。
以下のようにアクセスしたいファイルを絞り込んで検索してくれます。
※ 以下の設定では、CtrlPが提供しているファイル検索のみを使用し、CtrlPの拡張プラグインとして関数検索とコマンド履歴検索を使用しています。
"----------------------------------------------------------" インストール"----------------------------------------------------------" 多機能セレクタ
NeoBundle 'ctrlpvim/ctrlp.vim'" CtrlPの拡張プラグイン. 関数検索
NeoBundle 'tacahiroy/ctrlp-funky'" CtrlPの拡張プラグイン. コマンド履歴検索
NeoBundle 'suy/vim-ctrlp-commandline'"----------------------------------------------------------" CtrlPの設定"----------------------------------------------------------letg:ctrlp_match_window ='order:ttb,min:20,max:20,results:100'" マッチウインドウの設定. 「下部に表示, 大きさ20行で固定, 検索結果100件」letg:ctrlp_show_hidden =1" .(ドット)から始まるファイルも検索対象にするletg:ctrlp_types = ['fil'] "ファイル検索のみ使用letg:ctrlp_extensions = ['funky','commandline'] " CtrlPの拡張として「funky」と「commandline」を使用" CtrlPCommandLineの有効化
command! CtrlPCommandLine call ctrlp#init(ctrlp#commandline#id())" CtrlPFunkyの有効化letg:ctrlp_funky_matchtype ='path'
使い方
プラグイン名にもあるようにCtrl+Pで起動します。Ctrl+fで検索モードの切り替え。
エンターキーで検索結果にジャンプ。Escで終了です。
※ 他にも正規表現モードで検索したり、ファイル名のみの検索も可能です。
ctrlp-funky(関数検索)
編集中のファイル内にある関数を検索出来ます。関数一覧の表示としても便利です。
vim-ctrlp-commandline(コマンド履歴検索)
通常のコマンドの補完(wildmenu)とは違い、過去に実行したコマンドを補完してくれます。
agで検索の高速化
ファイル検索ですが、ファイル数が多くなるとCtrlPの起ち上げにかなり時間がかかります。
CtrlPが作成するキャッシュを利用する方法もありますが、Gitのブランチ名を変えた場合にいちいちキャッシュをクリアしないといけないので面倒臭いです。
以下ではagコマンドをCtrlPの検索に使用することで、起ち上げが爆速になり、キャッシュもクリアする必要が無くなります。
agのインストール
% sudo yum -y groupinstall "Development Tools"
% sudo yum -y install pcre-devel xz-devel
% git clone https://github.com/ggreer/the_silver_searcher.git
% cd the_silver_searcher
% ./build.sh
% sudo make install
vimrcの設定は以下のようになります。
"----------------------------------------------------------" インストール"----------------------------------------------------------" CtrlPの検索にagを使う
NeoBundle 'rking/ag.vim'"----------------------------------------------------------" ag.vimの設定"----------------------------------------------------------if executable('ag')" agが使える環境の場合letg:ctrlp_use_caching=0" CtrlPのキャッシュを使わないletg:ctrlp_user_command='ag %s -i --hidden -g ""'" 「ag」の検索設定endif
Syntastic(構文エラーチェック)
Syntasticは構文エラーやコーディング規約のチェックをvim上で行ってくれます。
JavascriptだとESLint、RubyだとRubocopなどの構文チェッカーがありますが、ここではESLintを例に説明します。
"----------------------------------------------------------" インストール"----------------------------------------------------------" 構文エラーチェック
NeoBundle 'scrooloose/syntastic'"----------------------------------------------------------" Syntasticの設定"----------------------------------------------------------" 構文エラー行に「>>」を表示letg:syntastic_enable_signs =1" 他のVimプラグインと競合するのを防ぐletg:syntastic_always_populate_loc_list =1" 構文エラーリストを非表示letg:syntastic_auto_loc_list =0" ファイルを開いた時に構文エラーチェックを実行するletg:syntastic_check_on_open =1" 「:wq」で終了する時も構文エラーチェックするletg:syntastic_check_on_wq =1" Javascript用. 構文エラーチェックにESLintを使用letg:syntastic_javascript_checkers=['eslint']
" Javascript以外は構文エラーチェックをしないletg:syntastic_mode_map = { 'mode': 'passive',
\ 'active_filetypes': ['javascript'],
\ 'passive_filetypes': [] }
構文エラーが多くなってくると一覧表示して確認したくなると思います。
その場合は以下のコマンドを打つと一覧表示してくれます。
:Errors
※ ファイルサイズが大きいとVimの起動時やファイル保存時に毎回構文エラーチェックが走って重くなります。
その場合はSyntasticの代わりにvim-watchdogsを入れると改善されると思います。→watchdogs.vim つくりました - C++でゲームプログラミング
プロジェクトESlintで構文エラーチェックする
ESLintはnpmでインストールすることになると思いますが、グローバルインストールしたESLint(以下グローバルESLintと呼ぶ)を使うのはオススメしません。
同じプロジェクト内で他のメンバーと作業をする場合、
プロジェクト内のpackage.jsonに記述されたESlint(以下プロジェクトESLintと呼ぶ)をローカルインストールして使うべきです。
グローバルESLintを使うとESLintのバージョンが各々で違う場合があり、
ある人はES2015がサポートされていて、ある人はES2015がサポートされていなかったりします。
SyntasticプラグインはグローバルESLintを使用し構文エラーチェックを行うので、
以下のVimプラグインを入れてプロジェクトESLintで構文エラーチェックするようにしましょう。
"----------------------------------------------------------" インストール"----------------------------------------------------------" プロジェクトに入ってるESLintを読み込む
NeoBundle 'pmsorhaindo/syntastic-local-eslint.vim'
ここまでの設定まとめ
setencoding=utf-8scriptencoding utf-8" ↑1行目は読み込み時の文字コード" ↑2行目はVim Script内でマルチバイトを使う場合に設定する" Vim Scritptにvimrcも含まれるので、日本語でコメントを書く場合は先頭にこの設定が必要になる"----------------------------------------------------------" NeoBundle"----------------------------------------------------------if has('vim_starting') " 初回起動時のみruntimepathにNeoBundleのパスを指定するsetruntimepath+=~/.vim/bundle/neobundle.vim/ " NeoBundleが未インストールであればgit cloneするif!isdirectory(expand("~/.vim/bundle/neobundle.vim/"))
echo "install NeoBundle..."
:call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim")endifendifcall neobundle#begin(expand('~/.vim/bundle/'))" インストールするVimプラグインを以下に記述" NeoBundle自身を管理
NeoBundleFetch 'Shougo/neobundle.vim'" カラースキームmolokai
NeoBundle 'tomasr/molokai'" ステータスラインの表示内容強化
NeoBundle 'itchyny/lightline.vim'" インデントの可視化
NeoBundle 'Yggdroot/indentLine'" 末尾の全角半角空白文字を赤くハイライト
NeoBundle 'bronson/vim-trailing-whitespace'" 構文エラーチェック
NeoBundle 'scrooloose/syntastic'" 多機能セレクタ
NeoBundle 'ctrlpvim/ctrlp.vim'" CtrlPの拡張プラグイン. 関数検索
NeoBundle 'tacahiroy/ctrlp-funky'" CtrlPの拡張プラグイン. コマンド履歴検索
NeoBundle 'suy/vim-ctrlp-commandline'" CtrlPの検索にagを使う
NeoBundle 'rking/ag.vim'" プロジェクトに入ってるESLintを読み込む
NeoBundle 'pmsorhaindo/syntastic-local-eslint.vim'" vimのlua機能が使える時だけ以下のVimプラグインをインストールするif has('lua') " コードの自動補完
NeoBundle 'Shougo/neocomplete.vim' " スニペットの補完機能
NeoBundle "Shougo/neosnippet" " スニペット集
NeoBundle 'Shougo/neosnippet-snippets'endifcall neobundle#end()" ファイルタイプ別のVimプラグイン/インデントを有効にするfiletype plugin indent on" 未インストールのVimプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定
NeoBundleCheck
"----------------------------------------------------------" カラースキーム"----------------------------------------------------------if neobundle#is_installed('molokai')colorscheme molokai " カラースキームにmolokaiを設定するendifsett_Co=256" iTerm2など既に256色環境なら無くても良いsyntax enable " 構文に色を付ける"----------------------------------------------------------" 文字"----------------------------------------------------------setfileencoding=utf-8" 保存時の文字コードsetfileencodings=ucs-boms,utf-8,euc-jp,cp932 " 読み込み時の文字コードの自動判別. 左側が優先されるsetfileformats=unix,dos,mac " 改行コードの自動判別. 左側が優先されるsetambiwidth=double " □や○文字が崩れる問題を解決"----------------------------------------------------------" ステータスライン"----------------------------------------------------------setlaststatus=2" ステータスラインを常に表示setshowmode" 現在のモードを表示setshowcmd" 打ったコマンドをステータスラインの下に表示setruler" ステータスラインの右側にカーソルの位置を表示する"----------------------------------------------------------" コマンドモード"----------------------------------------------------------setwildmenu" コマンドモードの補完sethistory=5000" 保存するコマンド履歴の数"----------------------------------------------------------" タブ・インデント"----------------------------------------------------------setexpandtab" タブ入力を複数の空白入力に置き換えるsettabstop=4" 画面上でタブ文字が占める幅setsofttabstop=4" 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅setautoindent" 改行時に前の行のインデントを継続するsetsmartindent" 改行時に前の行の構文をチェックし次の行のインデントを増減するsetshiftwidth=4" smartindentで増減する幅"----------------------------------------------------------" 文字列検索"----------------------------------------------------------setincsearch" インクリメンタルサーチ. 1文字入力毎に検索を行うsetignorecase" 検索パターンに大文字小文字を区別しないsetsmartcase" 検索パターンに大文字を含んでいたら大文字小文字を区別するsethlsearch" 検索結果をハイライト" ESCキー2度押しでハイライトの切り替えnnoremap<Esc><Esc> :<C-u>setnohlsearch!<CR>"----------------------------------------------------------" カーソル"----------------------------------------------------------setwhichwrap=b,s,h,l,<,>,[,],~" カーソルの左右移動で行末から次の行の行頭への移動が可能になるsetnumber" 行番号を表示setcursorline" カーソルラインをハイライト" 行が折り返し表示されていた場合、行単位ではなく表示行単位でカーソルを移動するnnoremapj gj
nnoremapk gk
nnoremap<down> gj
nnoremap<up> gk
" バックスペースキーの有効化setbackspace=indent,eol,start"----------------------------------------------------------" カッコ・タグの対応"----------------------------------------------------------setshowmatch" 括弧の対応関係を一瞬表示する
source $VIMRUNTIME/macros/matchit.vim" Vimの「%」を拡張する"----------------------------------------------------------" マウスでカーソル移動とスクロール"----------------------------------------------------------if has('mouse')setmouse=aif has('mouse_sgr')setttymouse=sgr
elseifv:version>703||v:versionis703&& has('patch632')setttymouse=sgr
elsesetttymouse=xterm2
endifendif"----------------------------------------------------------" クリップボードからのペースト"----------------------------------------------------------" 挿入モードでクリップボードからペーストする時に自動でインデントさせないようにするif&term=~"xterm"let&t_SI .="\e[?2004h"let&t_EI .="\e[?2004l"let&pastetoggle="\e[201~"function XTermPasteBegin(ret)setpastereturna:retendfunctioninoremap<special><expr><Esc>[200~ XTermPasteBegin("")endif"----------------------------------------------------------" neocomplete・neosnippetの設定"----------------------------------------------------------if neobundle#is_installed('neocomplete.vim') " Vim起動時にneocompleteを有効にするletg:neocomplete#enable_at_startup =1 " smartcase有効化. 大文字が入力されるまで大文字小文字の区別を無視するletg:neocomplete#enable_smart_case =1 " 3文字以上の単語に対して補完を有効にするletg:neocomplete#min_keyword_length =3 " 区切り文字まで補完するletg:neocomplete#enable_auto_delimiter =1 " 1文字目の入力から補完のポップアップを表示letg:neocomplete#auto_completion_start_length =1 " バックスペースで補完のポップアップを閉じるinoremap<expr><BS> neocomplete#smart_close_popup()."<C-h>" " エンターキーで補完候補の確定. スニペットの展開もエンターキーで確定
imap <expr><CR> neosnippet#expandable() ? "<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "<C-y>" : "<CR>" " タブキーで補完候補の選択. スニペット内のジャンプもタブキーでジャンプ
imap <expr><TAB> pumvisible() ? "<C-n>" : neosnippet#jumpable() ? "<Plug>(neosnippet_expand_or_jump)" : "<TAB>"endif"----------------------------------------------------------" Syntastic"----------------------------------------------------------" 構文エラー行に「>>」を表示letg:syntastic_enable_signs =1" 他のVimプラグインと競合するのを防ぐletg:syntastic_always_populate_loc_list =1" 構文エラーリストを非表示letg:syntastic_auto_loc_list =0" ファイルを開いた時に構文エラーチェックを実行するletg:syntastic_check_on_open =1" 「:wq」で終了する時も構文エラーチェックするletg:syntastic_check_on_wq =1" Javascript用. 構文エラーチェックにESLintを使用letg:syntastic_javascript_checkers=['eslint']
" Javascript以外は構文エラーチェックをしないletg:syntastic_mode_map = { 'mode': 'passive',
\ 'active_filetypes': ['javascript'],
\ 'passive_filetypes': [] }
"----------------------------------------------------------" CtrlP"----------------------------------------------------------letg:ctrlp_match_window ='order:ttb,min:20,max:20,results:100'" マッチウインドウの設定. 「下部に表示, 大きさ20行で固定, 検索結果100件」letg:ctrlp_show_hidden =1" .(ドット)から始まるファイルも検索対象にするletg:ctrlp_types = ['fil'] "ファイル検索のみ使用letg:ctrlp_extensions = ['funky','commandline'] " CtrlPの拡張として「funky」と「commandline」を使用" CtrlPCommandLineの有効化
command! CtrlPCommandLine call ctrlp#init(ctrlp#commandline#id())" CtrlPFunkyの絞り込み検索設定letg:ctrlp_funky_matchtype ='path'if executable('ag')letg:ctrlp_use_caching=0" CtrlPのキャッシュを使わないletg:ctrlp_user_command='ag %s -i --hidden -g ""'" 「ag」の検索設定endif
あとがき
Vimは突き詰めれば終わりがありません。便利なVimプラグインや設定はまだまだたくさんありますが、
vimrcの設定に時間を使いすぎるのは、あまりオススメしません。
Vimプラグインを調べる→設定する→便利になる。これって結構時間がかかるんですよ^^;
英語で書かれたドキュメントを読んだり、自分に合う設定を試行錯誤してみたり。
結局Vimは目的では無く、編集するための手段なのです。それだけは忘れないようにしましょう。
(Vimプラグイン作成者の方々、Vim関係者の方々には感謝ですm(_ _)m)
あ、あとVimを極めてもモテませんからね^^