回答:
ここでの主な違いは、括弧で囲まれた文(でターゲットci(
)はネストできますが、引用符で囲まれた文字列(でターゲットci"
)はネストできないことです。
カーソルが括弧で囲まれたステートメントの外側にある場合、カーソルは他のステートメントの内側にある可能性があります。例(*
カーソル位置をマーク):
$foo = array(
'x' => ar*ray(1, 2, 3),
);
カーソルが置かれている行にはが含まれ(1, 2, 3)
ていますが、カーソルは大きなarray(...)
ブロック内にもあります。この場合、大きい方がの適切なターゲットですci(
。
カーソルが引用符で囲まれた文字列の外側にある場合、それらはネストできないため、完全に賢明なことはありません。そのため、Vimはライン上の最初の引用符付き文字列を見つけて利用します。
他の答えは、これがなぜ起こるかをカバーしました。これを回避する良い方法があります。
wellle / targets.vim。私は最近このプラグインを見つけましたが、非常に過小評価されていると思います。これは、新しいテキストオブジェクトを提供する:din(
ニーモニックを:(D)elete(I)のn側(n)がEXT「(」これは以下のような他の演算子と複数の異なるオブジェクトと互換性がありan(
、in"
、il(
(最後の括弧内)
また、のデフォルトの動作をオーバーライドするi(
ため、最初にカーソルが括弧内にあるかどうかを確認し、そうでない場合はと同じように機能しin(
ます。この動作はオンまたはオフにできます。例えば:
def foo(bar):
^cursor here
カーソルが括弧内にないため、入力ci(
はと同じようcin(
に機能します。
def foo( ):
^Cursor here, and in insert mode
これもカウントを受け入れます。
def foo(bar): #Define function foo(bar)
^cursor here
入力c2in(
:
def foo(bar): #Define function foo( )
^cursor here
これは、新しいオブジェクト「引数」も提供します。たとえば、dana
「次の引数の周りを削除する」という意味です。これもカウントを受け入れます。例えば:
def foo(arg1, arg2, BADarg3):
^ cursor here
入力d3ana
:
def foo(arg1, arg2):
^ cursor here
このプラグインには他にも多くの機能がありますが、これらは基本的な機能です。