Motions and operators に
http://d.hatena.ne.jp/janus_wel/20100808/1281285821 の続き。範囲指定のハナシ。
- linewise, characterwise
- 行をまたぐ motion が指定された場合は行単位に操作を行う linewise となって、 1 行以内におさまる motion が指定された場合文字単位に操作を行う characterwise になるということだけど文字だけの説明じゃちょっとわかりにくいな。手を動かすの推奨。
- あとあくまで motion によってここらへんが決まるのであって operator だけではわからないというわけだね。
- exclusive, inclusive
- で、文字単位での motion の場合 ( characterwise と書いてないのは何か意味があるのかな ) さらに exclusive か inclusive かのどっちかになるよ、と。
- linewise は常に始点も終点も含むのでこういう概念はないというようなことが書かれている。
- ちなみに motion に ex-command を使う場合は exclusive になるぽい ( d:call search("foo") は exclusive だった ) ?
- ここらへんの記述てつまり linewise, characterwise, exclusive, inclusive ていう言葉が出てくる文脈は operator + motion のハナシだよと言ってるわけだよな。
- 例外
- 上記までが一般的な規則。で、規則には例外があるのが常なんだけどこれらの例外事項は linewise であるときに限定されるみたい。
- ひとつめ。 exclusive かつ終点が 1 列目になる motion を inclusive かつ終点をひとつ上の行の最後の文字にするという風に扱う規則。例に d} があがってるんだけど ( :help } ) これをこの例外規則なしに実行すると段落の次の空行も一緒に delete してしまうわけだね。
- ふたつめ。 motion が exclusive であるとき、終点が 1 列目かつ始点がその行の最初の非 blank 文字 ( space と tab 以外 ) かそれより前の場合、 linewise として扱う、というもの。正直文字だけで説明するのはアレだと思ったので画像で。
- o_v, o_V, o_CTRL-V
- operator を打った直後に v や V や <C-v> を打つと linewise を exclusive に、とか exclusive を inclusive に、それらの逆とか、いろいろ挙動を変えられるみたい。
- めんどくさいので以下 command と画像でお送りします。もとの buffer が という前提ね。
- ただここらへんを使えてうれしい場面がわからない。慣れの問題 ?
それぞれの motion が linewise か exclusive か inclusive かくらいは覚えておくといいよという結論に落ち着いた。おぼえるつっても category ごとに決まってるような感じなのでそんなに苦ではない感じ。