web-dev-qa-db-ja.com

vi / vimの括弧間をつかんで削除できますか?

Cの次のコード行を考えます:

printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));

最初の太字の括弧から対応する括弧に削除またはヤンクする方法はありますか? df)について考えましたが、それは9.0の直後に到達するだけです。

改行に関係なく、一致するブレース間ですべてを取得するためのvimを取得する同様の方法はありますか?

112
romandas

さまざまなモーション:%

%コマンド は、カーソルの下のアイテムの一致にジャンプします。開始(または終了)括弧にカーソルを置き、y%を使用してヤンクするか、d%を使用して、カーソルから一致する括弧に至るすべてを削除します。

これは%が「モーションコマンド」であるため機能します。そのため、vimがそのようなコマンドを期待する場所であればどこでも使用できます。 :help y から:

["x]y{motion}       Yank {motion} text [into register x].  When no
                    characters are to be yanked (e.g., "y0" in column 1),
                    this is an error when 'cpoptions' includes the 'E'
                    flag.

デフォルトでは、「アイテム」には角括弧、中括弧、括弧、Cスタイルのコメント、およびさまざまなプリコンパイラステートメント(#ifdefなど)が含まれます。

Vimホームページ にある「拡張%マッチング」用のプラグインがあります。

コマンドモードで % と入力すると、:help various-motionsおよび関連するモーションコマンドのドキュメントを読むことができます。

オブジェクト選択

ビジュアルモードでさまざまなテキストオブジェクトを選択するために使用できるモーションコマンドの別のセットがあります。

特定の問題を解決するには、次を実行します。

printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
                                   ^

カーソルが^にあるとしましょう。次のシーケンスを入力して、探しているパーツを選択します。

v2a)

最初にvがビジュアルモードに入り、次に2レベルの括弧に移動することを指定します。最後に、a)は「ブロック」を選択します。その後、dまたはxを使用して削除することができます。

外部括弧を含めたくない場合は、代わりに「内部ブロック」を使用できます。

v2i)

関連コマンドの完全なリストについては、 :help object-select を参照してください。

156
user3850

dibまたはdi(

カーソルがあるinner(...)ブロックを削除します。

text-object モーションと選択が大好き!

188
CMS

括弧内のすべてを削除するには、di(とその派生物を常に発行できます。

注:

@porglezombがコメントで示唆したように、a( "inside")の代わりにi( "with with")を使用して括弧を含めることができます。したがって、da(を使用すると、(および)を含む(および)内のすべてが削除されます。

括弧のすぐ外側のペア内のテキストの削除:

したがって、このコード行について

printf("%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32)));
                                ^       ^
                                |       |
                                 \_______\___---> Cursor range

カーソルが上記のカーソル範囲内にあると仮定すると、次のコマンドを発行できます。

di(   --> Deletes '5.0/9.0'
ci(   --> Substitutes '5.0/9.0'
yi(   --> Yanks '5.0/9.0'

括弧の外側のn番目のペア内のテキストの削除:

N番目の外側の括弧のペア内のすべてを取得するには、上記のコマンドの前にnを追加します。したがって、上記と同じカーソル位置で、

2di(   --> Deletes '(5.0/9.0) * (fahr-32)'
2ci(   --> Substitutes '(5.0/9.0) * (fahr-32)'
2yi(   --> Yanks '(5.0/9.0) * (fahr-32)'

3di(   --> Deletes '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'
3ci(   --> Substitutes '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'
3yi(   --> Yanks '"%3.0f\t%6.1f\n", fahr, ((5.0/9.0) * (fahr-32))'
31
Kevin

削除にはd%を、ヤンクにはy%を使用できます。

16
ahy1

最初の括弧にカーソルを置き、v%yまたはv%dを押します。

10
David Norman

Ci [block-surrounder]を試してください

あなたの場合、ハイライトした2つの括弧の間のどこかにカーソルを置き、キーを試してください:ci(

2
Justin Nguyen

answer David Normanのように、

最初の括弧にカーソルを置き、v%yまたはv%dを押します。

http://vimdoc.sourceforge.net/htmldoc/vimindex.html からの説明:

通常モードでのchar charアクションのタグ付け
 --------------------------------- --------------------------------------------- 
 | v | v文字単位の視覚モードを開始します
 |%| %1 
この行で次の(中/角)ブラケットを見つけて一致するか、
一致するコメントブラケットに移動するか、一致する
 | d |に移動します["x] d {motion} 2 Nmoveテキストを削除する[バッファxへ] 

つまり、2つの角かっこ(%)を含むすべてを選択しながら、選択範囲を視覚的に表示し(v)、次にyank/copy yまたはdelete/cut d それ。 (デフォルトのバッファーへ。)

pで貼り付け/貼り付けができます。

「魚に自分を教える」 に対してこの回答をしました。

0
n611x007