7625


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

以下のテキストについて

[code]

    (red \(blue) green)
    
[/code]

ここでカーソルを

[code]

    (r.ed \(blue) green)
    (red \(bl.ue) green)
    
[/code]

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

[code]

    (red \(blue) gr.een)
    
[/code]

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

[code]

    (red \ (blue) green)
    
[/code]

この場合と揃えたい，ということです．

* * *

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

[code]

    \(x,y) -> ...
    
[/code]

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


CC BY-SA 3.0
2015-03-08T07:08:29.317
7604
2015-03-08T21:53:12.570
2901
question
vim
text object : `\(` などをエスケープせずに扱いたい


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

[code]

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

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

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


CC BY-SA 3.0
2015-03-08T16:20:14.660
7625
2015-03-08T21:53:12.570
2015-03-08T21:53:12.570
2901
2687
7604
answer