Vimのおまじない(初心者向け)
Adventカレンダー記事がかけたら、と思いましたが、内容の保障もなにもないので、Adventのアイテムではなく単発のやっつけ記事です
やっと初心者の最後くらいにはきた人間(といっても操作もふくめまだまだですが...)がふりかえり記事を作ってみます
初心者向け設定解説
あるいはハマることがある所
そしてグチ
set nocompatible
以下のような設定を事前に設定
if !&compatible
set nocompatible
endif
ほとんどのvimプラグインなどが機能のために要求する(?)設定
see set nocompatibleはもういらない - Qiita
にもありますが、現在は不要なはず
filetype plugin indent onとsyntax on
以下のような設定を事前に設定
filetype plugin indent on
syntax on
ファイルタイプ、ファイル形式別プラグイン、インデント、シンタックスハイライト関連の機能を使うとき、上記を実施後に設定する必要があったりする
逆に有効前に設定しないとダメなパターンもたまにある
let g:hoge_enable = 0
以下のような設定をプラグインロード前に設定
let g:hoge_enable = 0
プラグインによってはoff機能を提供しているが、副作用の影響などから、プラグインロード前に設定しないといけないことがある
また、同じように、初期設定時の値が内部保持され、後で書き換えが効かない項目があり、それも事前に設定しないといけない
let g:hoge_data = 1
以下のような設定をプラグインロード後に設定
let g:hoge_data = 1
上記の逆で、初期設定値をプラグインロード時に固定値で設定されてしまうなどする場合はロード後に上書き設定しないといけない
colorscheme
以下のような設定をプラグインロード後に設定
colorscheme hoge
カラースキームがプラグインロードが終らないと利用可能にならないため、ロード後に設定
一般にプラグインの提供関数を、生の記述で利用する時はロード後に書く必要がある
ただ後でevalされる系の設定だと、文字列内に関数名を書けるものはある
mapとnoremap
キーアサインするときは
nnoremap x:call hoge()
のようにnoremap系で設定することが多い
逆にプラグインの提供機能をマップするときは
nmap x<Plug>Hoge
のようにnmapすることがある
noremapは再マップを抑制して変なマッピングを避けるため
プラグイン機能のmapはすでに
nnoremap <Plug>(Hoge):call hoge()
とにマッピングされているものを再マップする必要があるのでmapで行う
see 【図解Vim】mapとnoremap - ここぽんのーと
初心者殺し
上記から
- 設定するのがプラグインのロード前/後か、ドキュメントから十分に読みきれない場合があり、それらは試行錯誤かプラグインのソースの読み解きができないと正しく設定できなかったりする
- キーマップ関係は見分けはつくが、ここを理解しないままキーマップを使い始めると悩むことが多い
.vimrcイベントタイミング一覧整理
- encoding/scriptencoding
- set nocompatible(やらなくていいはず)
- プラグインロード前
- プラグインロード
- プラグインロード後
- 事例:singleton#enableはここで実施しないとこの後の処理が無駄になったり機能しなかったりする
- filetype plugin indent on
- syntax enable (or on)
- and more