Motions and operators いち

vim の help をちゃんと読んでみよう series そのいち。まずは "Motions and operators" ( :help operator ) 。日本語的には「 ( カーソル ) 移動と ( テキスト ) 操作」という意味くらいに取っておけばいい、はず。これを読むと何がいいかってコピペが楽になるのとすべて大文字の単語を打つときに shift key 押しっぱなしにしなくてもいいことに気づけることかなー。

  • operator, operator command
    • すでに存在する text を「操作」 ( yank, delete, capitlize, decapitalize etc ) するための normal command を operator だとか operator command だとか言う。
    • 訳としては演算子だとか作用子なんかもアリだとは思うんだけどひとが operation するときに使うから operator という名前なんだろうなぁと推測したので「操作」。
  • motion, motion command
    • :help {motion}
    • cursor の位置を「移動」するための normal command を motion だとか motion command だとか言う。
    • こっちも愚直に訳すなら動作あたりだと思うんだけどやっぱりその動作をおこすのはひとなのでひとが介入してる感の大きい「移動」にした。
  • operator + motion
    • そして operator と motion を組み合わせて normal mode でお手軽に text に対して何かしちゃおうというのがこの help の主旨かな。
    • operator command のあとに motion command を続けて打つことで操作内容と適用範囲を指定する、というもの。操作内容は operator command で指示するというのはともかく適用範囲は現在の cursor 位置 ( 以下「始点」 ) から motion command で移動したあとの cursor 位置 ( 以下「終点」 ) までをその範囲とする、ということだね。
    • operator も motion も normal command なので先行して count を指定することができる ( :help count ) んだけど両方に指定した場合どうなるのかというのは両方の積が範囲指定に使われるっぽい。まぁここらへんは 2d3w は 3 単語 delete することを 2 回なのでつまり 6 単語 delete するということなのはわかるんだけど範囲指定を motion 側で行うという意識からすると 2d3wd6w になるという脳内変換をするのがよいかも。
      • 余談だけど 2d3w は英語だと "Delete three words twice" なんだけどこれ英語圏のひとの自然な発想じゃないよなぁと思ったりした。 d6w なら "Delete six words" で自然ぽいんだけど。あーでもそうすると count という概念自体が英語的にアレなことになるのかな。 operation + motion の概念が出てきてやっと feeling に近づくというちょっとアレな command 体系なのかも。
        • operator が operand のうしろにある ( ようにも解釈できる ) から単に reverse polish notation なだけじゃねという推測もアリだけど本筋じゃないからここで終わり。
    • cursor 移動を行って適用範囲を決めるってことは operator + motion で操作した場合 cursor の位置は motion command で移動したところになるのか ? という疑問が浮かぶんだけど text の開始位置の一番左に cursor が移動しますとか書いてある ( "mostly left at the start of the text" ) 。
    • operator と motion の間に :omap command で定義した mapping を入力可能、と。うーん何に使えるのか思いつかない…。
    • operator + motion の代わりに visual mode で範囲を指定してから operator を打つと text 操作がやりやすいよと書かれてるけどここは本筋ではないので省略。
      • ただまぁ「ここをこうする」という日本語的な感覚なので日本語 native は visual mode の方が使いやすいのかも。
    • motion の代わりに ex-command を使うことができるとも書いてある。
      • 複数行でも OK だけどその場合 . での再操作は無理らしい。こういう場合は "|" を使って各 ex-command をつなげればいいのかな。

長くなるのでいったん切る。