Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vimのおまじない(初心者向け)

$
0
0

Vimのおまじない(初心者向け)

Adventカレンダー記事がかけたら、と思いましたが、内容の保障もなにもないので、Adventのアイテムではなく単発のやっつけ記事です
やっと初心者の最後くらいにはきた人間(といっても操作もふくめまだまだですが...)がふりかえり記事を作ってみます


初心者向け設定解説

あるいはハマることがある所
そしてグチ

set nocompatible

以下のような設定を事前に設定

.vimrc
if !&compatible
  set nocompatible
endif

ほとんどのvimプラグインなどが機能のために要求する(?)設定

see set nocompatibleはもういらない - Qiita

にもありますが、現在は不要なはず

filetype plugin indent onとsyntax on

以下のような設定を事前に設定

.vimrc
filetype plugin indent on
syntax on                

ファイルタイプ、ファイル形式別プラグイン、インデント、シンタックスハイライト関連の機能を使うとき、上記を実施後に設定する必要があったりする

逆に有効前に設定しないとダメなパターンもたまにある

let g:hoge_enable = 0

以下のような設定をプラグインロード前に設定

.vimrc
let g:hoge_enable = 0

プラグインによってはoff機能を提供しているが、副作用の影響などから、プラグインロード前に設定しないといけないことがある

また、同じように、初期設定時の値が内部保持され、後で書き換えが効かない項目があり、それも事前に設定しないといけない

let g:hoge_data = 1

以下のような設定をプラグインロード後に設定

.vimrc
let g:hoge_data = 1

上記の逆で、初期設定値をプラグインロード時に固定値で設定されてしまうなどする場合はロード後に上書き設定しないといけない

colorscheme

以下のような設定をプラグインロード後に設定

.vimrc
colorscheme hoge

カラースキームがプラグインロードが終らないと利用可能にならないため、ロード後に設定

一般にプラグインの提供関数を、生の記述で利用する時はロード後に書く必要がある
ただ後でevalされる系の設定だと、文字列内に関数名を書けるものはある

mapとnoremap

キーアサインするときは

.vimrc
nnoremap x:call hoge()

のようにnoremap系で設定することが多い

逆にプラグインの提供機能をマップするときは

.vimrc
nmap x<Plug>Hoge

のようにnmapすることがある

noremapは再マップを抑制して変なマッピングを避けるため
プラグイン機能のmapはすでに

.vimrc
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

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>