17

Vimに次のテキスト行があるとします。

(foo bar (baz) qux)
    ^

示されているように、カーソルは単語fooとの間のスペースにありbarます。このような状況では、左側をそのままにして、外側の括弧で囲まれた式の右側全体(つまり、カーソルの右側)を削除したいことがよくあります。つまり、最終的には次のようになります。

(foo)

通常、これは dt)(“ delete until  )”)で実現しますが、ネストされた括弧を追加すると、事態が複雑になります。そのコマンドでは、が残り(foo) qux)ます。を使用することもできます d2t)が、ネストされた括弧の数を手動で数える必要はありません。を使用することもでき ますが、括弧内のテキスト 全体di)が削除され、 。が残ります。()

現在のカーソル位置に相対的なi-およびa-変更されたモーションのバランス認識を備えたVimモーションはありますか?

4

2 に答える 2

15

])でモーションを使用できますd

d])
于 2011-08-25T00:07:53.380 に答える
3
mxF(%d`x

それを分解する:

mx

マークを付けるx(好きな文字を選んでください)

F(

(前の文字を検索

%

マッチングにジャンプ)

d`x

ここから削除してマークを付けますx

これは特定のケースで機能します。それがどれほど一般的かはわかりません。前(の行が現在の行にない場合は、?(<return>ではなくを使用しますF(

編集:私はそれについて知らなかったので私は
言及しませんでした。d])

私の解決策はこの場合は機能しません:

( (before) foo (after) )
              ^

これは、最も近い囲み(ではなく、最も近いにジャンプして戻るためです。 (

于 2011-08-25T00:07:55.470 に答える