vim tips

setに関するtips色々。
今回は.vimrcで同じみなset。

値をセットする

いっちゃんシンプルな使い方は

" on/off しかないオプション
set {option}
set no{option}
" 数字や文字などの値をセットする必要があるオプション
set {option}={value}
" '='じゃなくて':'でもいけるらしい。
set {option}:{value}
" {option}と'='の間にはホワイトスペースは許され「る」
" '='と{value}の間にはホワイトスペースは許され「ない」
set {option} ={value} "正
set {option}= {value} "誤
" 値にホワイトスペースを使いたいときは'\'でエスケープする
" ex) tabsに半角スペースを二つ、を指定したい。
set listchars=tab:\ \ ,trail:_,precedes:<,extends:>
" '"'(ダブルクォート)は使えないので注意

exコマンドからも使えるので編集中にも値を変えられます。
よく使う例としては

" コードなどをペーストしたときインデントされないようにする
:set paste
" ↑を解除
:set nopaste
" 改行コードをunix系のに変える。
:set fileformat=unix

などなど。

今どんな値がセットされてるか調べる

今どんな値がしていされてるか知りたい場合は

:set {option}?

の様にオプションの後に"?"をつける。

Toggle optionの場合は

" セットされている場合
:set hidden?
  hidden
" セットされてない場合
:set hidden?
nohidden

の様にセットされていない場合は"no"がつきます。

その他は

:set wildmode?
  wildmode=list:longest

のように"="をはさんで値がでます。

とはいえ、後者の場合

:set {option}=

まで打って、Ctrl-EとかTab*1で表示されるのであまり使わないかも。

ディフォルトの値にもどす。

vimを開き直せばいい話、なのですが、まぁめんどいですしね。

:set {option}&

の様にオプションの後ろに"&"をつければおっけーです。
viあるいはvimのディフォルトにしたい!って時は

:set {option}&vi
:set {option}&vim

の様にすればいいようです。
...viディフォルトとかあんま使わない気がする。

オプションの反転

Toggle optionの値を反転させたい、時に使う。

:set {option}!
:set inv{option}

らしいが使いどころがワカラン。
pasteぐらいか?

:set paste!
" oとかでinsert modeにして、Shift-Insとかで貼り付ける。
:set paste!

一回打てば履歴からたどれるからキータイプ数はへるけど...。
そんな手間ではないしなぁ...。*2

すでに指定されているvalueをいじる。

具体的にはリストに付け足したり、リストの要素を消したり。

" 要素の追加(後ろに追加
:set {option}+={value}
" 要素の追加(前に追加
:set {option}^={value}
" 要素の削除
:set {option}-={value}

個人的に「^=」がハツミミ

具体例で言えば

" ffs(=fileformats)にunix,dos,macを指定する
:set ffs=unix,dos,mac
" 確認
:set ffs?
  fileformats=unix,dos,mac
" dosを抜いてみる
:set ffs-=dos
:set ffs?
  fileformats=unix,mac
" 後ろにdos追加してみる
:set ffs+=dos
:set ffs?
  fileformats=unix,mac,dos
" すでに要素にある時は何もしないらしい
:set ffs^=dos
:set ffs?
  fileformats=unix,mac,dos
" macを一旦削除して前に出してみる
:set ffs-=mac
:set ffs^=mac
:set ffs?
  fileformats=mac,unix,dos

こんな感じ。
','は勝手に追加されます。

じつはこれリストオプションだけでなく、数字オプションにも使える

" value分だけ加算する
:set {option}+={value}
" value分だけ乗算する(!!
:set {option}^={value}
" value分だけ減算する
:set {option}-={value}

乗算とか必要なのか小1時間ほど問い詰めたい気分ですが、まぁ、あるのです。
加算/減算は、まぁ、そんまんまなんでわかりやすいですね。はい。

全部のオプションに対して操作する

といっても二つだけ

" すべてのオプションの値を調べる
:set all
" すべてのオプションを元に戻す。
:set all&

さすがに「:set all!」は無いようです(アタリマエだ。


ということで、まだまだsetは奥が深いのですが、とりあえずここまで。
(д̣)ノシ

*1:オプションの'wildchar'で変更可能

*2:ついでに言えば「"+p」でクリップボードからのプットができるとpaste使わないし