Vim をプラグインなしで使いこなす

やりたくないこと

かつて遭遇したこと

更新のたびに仕様変更と新たな不具合が発生し、doc を追うのが苦痛になった。
→ プラグインのせいで :help を読めなくなるなんて馬鹿馬鹿しい。
プラグイン同士が依存してて、1つや2つ導入するだけでは済まされなかった。
→ Shougo さん出しゃばらないで! これ僕の vimrc なんだけど!!
画面のスクロールが引っ掛かり、挿入モードでの入力中に頻繁に Vim が落ちた。
→ えっ!? プラグインを使って構文ハイライトしてただけなのに。

よその vimrc を読まずにコピペするのと、よそのプラグインを使うのでは、
他人が書いた Vim script を自分の vimrc に注入する点では同じなのに、
前者と違って後者はバンバンやっていいみたいなノリがあって正直怖い。

以下、僕の vimrc から抜粋。
:help を読みましょう、苦痛かもしれないけど。

入力補完

'complete' による補完 i_CTRL-N でひと通り補完できる。
ただし素では重いから、補完候補を絞るといい。
ファイル名補完 i_CTRL-X_CTRL-F だけ別になるけど、他は事足りる。
'pumheight' で補完メニューの行数を抑えられる。

set complete=.,t,i set completeopt+=noselect set pumheight=10
imap <expr><Up> pumvisible() ? '<C-p>' : '<Up>' imap <expr><Down> pumvisible() ? '<C-n>' : '<Down>' imap <expr><CR> pumvisible() ? '<C-y>' : '<CR>' imap <expr><BS> pumvisible() ? '<C-e>' : '<BS>' imap <expr><Tab> pumvisible() ? '<C-n>' : '<C-n>'
autocmd FileType vim imap <buffer><expr><Tab> pumvisible() ? '<C-n>' : '<C-x><C-v>'

構文ハイライト

:syntax:highlight を書く。
命名規約さえしっかり決めておけば重たい構文解析器は要らない。

C

色が寂しいところを素直に設定した。

syntax match Define /\<\u[0-9A-Z_]\+\>/ syntax match Function /\<\h\w*\>(\@=/ syntax match cType /\<\u\l\h*\>(\@!\|\<\u\+\>/ highlight link cStructure Keyword highlight link cType Type

JavaScript

変なところに色がついてたから消した。

syntax clear javaScriptBraces syntax clear javaScriptFunction syntax match Define /\<\u[0-9A-Z_]\+\>/ syntax match Function /\<\h\w*\>(\@=/ syntax match Number /0x\x\+\|-\?\<\d\+\(\.\d\+\)\?/ highlight link javaScriptIdentifier Type

Ruby

最初から読みやすかったから、これだけ。

syntax match Function /\<\h\w*\>[!?]\?(\@=/

ビルドとデバッグ

どうせプラグインを使っても回りくどい設定を書かされる。

%:~:r ヽ('□'*)ノおーよしよし!

C

$ pacman -S valgrind

nmap <buffer><F5> :make -C %:h -f Makefile.debug<CR> nmap <buffer><F6> :!valgrind --leak-check=full %:~:r nmap <buffer><F7> :!%:~:r nmap <buffer><F8> :make -C %:h<CR>

JavaScript

nmap <buffer><F8> :make -C %:h<CR>

Ruby

$ gem install bundler

nmap <buffer><F7> :!bundle exec ruby %<CR>

タグファイルの作成

:autocmd はイベントハンドラみたいな感覚で使えるから頼もしい。
system():! と違って裏方で処理されるから、結果を待たなくていい処理はこの書き方がいい。

autocmd BufWritePost *.c,*.js,*.rb call system('ctags -f '.expand('%:h').'/tags '.expand('%'))

ステータス表示

この手のプラグインは難しそうだったから素直に 'statusline' を書いた。
この書き方は Windows のサクラエディタのような表示になる。

set statusline=%f\ %h%w%r%m%=0x%B\ %l/%L\ %{&fenc.','.&ff}\ %y

ファイラ

ls や cd に慣れたらプラグインが要らなくなった。
:e %<Tab> でバッファのファイル名が出てくるし、履歴補完もあるから Vim のコマンドラインで十分。

set wildmode^=list:longest

カラースキーム

これだけはプラグインを使う。
開発が終わって安定してるやつがいい。
neoなんとかを使わないで dotfiles と一緒に管理しよう。

bundledir=~/.vim/bundle test ! -d "$bundledir" && mkdir -p "$bundledir" && cd "$bundledir" && \ git clone --depth 1 git://github.com/altercation/vim-colors-solarized.git

set runtimepath+=~/.vim/bundle/vim-colors-solarized