2011-10-18 19 views
12

vi'またはvi"を発行して、引用符/二重引用符で囲まれたテキストを選択することができます。例えば、Hでカーソルで、私はvi"Vimの括弧の外側の括弧の中のテキストを選択

Hello "World" 

を発行してWorldを選択することができますしかし、これは私のカーソルがHであれば、私は

Hello (World) 

を持っていた場合は動作していないようですし、私が選択しようWorldvi)を使用すると動作しません。これを行う唯一の方法は実際にカーソルを括弧の中に移動してvi)を発行することです。なぜ、このように異なる "内のテキストを選択する)としますか?

+0

私はこの質問に以前に答えられたと確信していますが、私はそれを見つけることができません! –

答えて

25

{ai}×{()b}テキストオブジェクト・コマンドと異なるからその "'`カウンターパートは主に結果の差を ブロック引用符で囲まれた文字列の定義(:help v_ab:help v_aquoteを参照)。

後者は、以前引用characteからテキストであるが現在の の行を次の行に置き換えます(エスケープされた行を除く)。前者は前の一致しないn番目の括弧と との間のテキストの末尾にある です。簡単に言えば、コマンドva((カウントなし)は、 [(v%のようになります。カーソルの前にマッチしない括弧がない場合は、両方とも を選択します。ただし、コマンドva"は現在の行をスキャンして、一致する の引用符を検索します。

行動の違いの主な理由は、私が思う、 文字列引用され、括弧とは対照的に、(少なくとも、内蔵のVimのテキストオブジェクトの 観点で)非入れ子になったと仮定していることです。現在の行の次の括弧内のテキストを選択し

、一つは選択に括弧を含むこと

%vi(

又は

%va(

を使用することができます。

+0

+1、これは美しいです、ありがとう。 – romainl

+0

残念ながら、この解決策は括弧でのみ機能し、他の種類のブラケットでは機能しません。 –

+3

@Daniel:正方形、中括弧、角括弧などには、それぞれ%vi ['、'%vi {'、'%vi <'など]を使用します。 –

1

This comment on Hacker Newsは、おそらく問題を解決するスクリプトを指しています。

未テストですが、Steve Loshがそれを使っていると良いかもしれません。