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


128

Cの次のコード行があるとします。

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

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

改行に関係なく、一致する中括弧の間にすべてをvimが取得する同様の方法はありますか?

回答:


167

さまざまな動き:%

%コマンドは、カーソルの下にある項目の試合にジャンプします。カーソルを開始(または終了)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関連するコマンドの完全なリストについては、を参照してください。


ありがとう!一致するアイテム間の切り替え率は%でした。コマンド内でも役立つことを知りませんでした。+1して受け入れました。
romandas

5
興味深いことに、私は常にa「a」ではなく「around」を意味すると思っていました。それが「内側」をよりよく補完するように感じます。Vimについて何か新しいことを学ばないことで1日が過ぎることはありません。
Andrew Marshall、

217

どの程度dibdi(

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

私は愛するテキストオブジェクトの動きや選択を!


10
幸いにも、この質問は私がグーグルで検索したときの最初のヒットです。この回答で何回救われたかはわかりません。そして私はいつもそれを忘れています…:-(
Konrad Rudolph

16
括弧を含めて削除できますか?(うん、私は自分の質問に答えました:dab=> ブロック(括弧を含む)を削除ます
バンティック

5
私は投票します。さらに、括弧内の単語を修正したい場合は、ciwを実行します。
開発者MariusŽilėnas15年

5
+1!最近テキストオブジェクトの動きを発見したとき、私は心を打たれました!テキストをヤンクするためにカーソルを正しい場所に配置する必要はもうありません:D
verboze '25年

36

かっこ内にあるものをすべて削除するには、いつでもdi(とその派生物を発行できます。

注意 :

@porglezombがコメントで提案したように、括弧を含めるaにはi(「内側」)の代わりに(「と一緒に」)を使用できます。だから、使用して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))'

3
多くの人々を助ける可能性があるのでa、の対応部分として話しているメモを追加する必要iがあります。
porglezomp 2016年

@romandasこれは受け入れられる質問でなければなりません。今日はまったく同じ問題を探していましたが、@ Kevinだけが適切な答えを出しました。もちろん、%この問題を「誤用」することはできますが、これには時間がかかります。私の意見では、より複雑なシナリオでのみ使用する必要があります。特定のスコープ内で何かを削除することは、まさにユースケースdiです。
daniel451

19

d%削除とy%ヤンキングに使用できます。


3
%は、「一致する括弧、角括弧、または中括弧」の移動指定子です。あらゆる動きの指定は、dおよびy(および他の多くのもの)と組み合わせることができます。
混沌

10

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


3
すごい!%は、対応する括弧にジャンプします。したがって、d%とy%を使用することもできます。

1
また、 'd%'は関数名の先頭から開始でき、関数呼び出し全体が削除されることにも注意してください。また、「{}」、「[]」、さらに「<>」のペアでも機能します。
ジョナサンレフラー、

@レフラー、ヒントをありがとう!また、%がビジュアルモードでも機能することを知っておくと便利です。
ストレッジャー、

3

ci [block-surrounder]をお試しください

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


ほぼ。これをテストすると、カーソルは最初の括弧内ではなく、最初の括弧上にある必要があるように見えます。'c 'は変更コマンドです。かっこにカーソルと一致する閉じ括弧に、「ジ(」削除、および「YI(」ヤンク。
リチャードNeish

ciはいつも私のために働きます。削除する必要があるテキストのブロックを囲む括弧の間にカーソルがあることを確認するだけです。
Justin Nguyen

2

以下のような答えデビッドノーマンの言います、

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

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

通常モードでのタグ文字注記アクション        
-------------------------------------------------- ----------------------------
| v | v文字ごとのビジュアルモードを開始する
|%| %1は次の(中/四角)括弧を検索します
                                       この行とそのマッチに行くか、に行く
                                       一致するコメントブラケット、または一致に移動
| d | ["x] d {motion} 2 Nmoveテキストを削除[バッファxへ]

つまり、2つの角かっこ(%)を含むすべてを選択し、選択を視覚的に表示(v)してから、ヤンク/コピーyまたは削除/カットdします。(デフォルトのバッファに。)

を使用して貼り付けることができpます。

「自分に魚を教える」という答えを出しました。


注:vimdoc.sourceforge.netは、2015
14:47
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.