4

以下 . をカーソルの位置とします.

以下のテキストについて

(red \(blue) green)

ここでカーソルを

(r.ed \(blue) green)
(red \(bl.ue) green)

などとして vi) すると red \(blue までが選択され,

(red \(blue) gr.een)

ここでは機能しません. \(をエスケープする感じで解釈してくれているということなのだと思うのですが,これも普通の括弧として解釈してもらうにはどうすればよいでしょうか.上記の例で行くとそれぞれ red \(blue) green, blue, red \(blue) green が選択されて欲しい,ということになります(動きとしては T(vt) などで対処できるケースが多くはあるのですが,それはまた別として).別の言い方をすれば挙動を

(red \ (blue) green)

この場合と揃えたい,ということです.


ちなみにこれをしたいのは, haskell を書いていて

\(x,y) -> ...

というような書き方をすることがあるためです.

Yosh
  • 1,293
  • 1
  • 11
  • 30

1 Answers1

8

set cpo+=M を設定すればお望みの動作になります。 :h cpo-M

When excluded, "%" matching will take backslashes into
account.  Thus in "( \( )" and "\( ( \)" the outer
parenthesis match.  When included "%" ignores
backslashes, which is Vi compatible.

...と言いたかったところですが、Vimにバグがあって正しく選択されないです。
先ほど修正patchを作成し作者に投げましたのでいつか修正されると思います。

詳細は以下のリンクを参照下さい。
https://github.com/vim-jp/issues/issues/711
https://groups.google.com/d/msg/vim_dev/q-NWRP7fuFI/cZpPR8iavNwJ

Yosh
  • 1,293
  • 1
  • 11
  • 30
h_east
  • 924
  • 4
  • 6
  • おおおお….cpo-M 自体把握していなかったのですが,patch の動作も確認しました,ありがとうございます! – Yosh Mar 08 '15 at 16:31
  • 2
    Patch 7.4.662 で修正されました。 https://groups.google.com/d/msg/vim_dev/oNtLa6ZDB8c/UWmVhdvTj94J – h_east Mar 14 '15 at 00:24