6

設定ファイルの次のコードを削除したい:

server {
    listen 80;
    server_name xxx;
    location / {
        try_files xx;
    }
}

使用できることはわかっています7ddが、これでは十分ではありません。セクションが長すぎると、行を数えるのが不便になります。

これを行うためのより良い方法はありますか?

時々、関数全体を削除する必要がありますが、そのためのアイデアはありますか?

4

5 に答える 5

7

Vim と同様に、方法はたくさんあります。

最初の 2 つの解決策は、ブロック内に空白行がないことに依存することに注意してください。

  • カーソルがserver行上にある場合は、 を試してくださいd}。次のブロックまですべて削除されます。

  • エントリ自体の中でdap、「段落」を削除します。

  • で中括弧ブロックを削除できますda}。(この構文が気に入った場合は、Tim Pope の素晴らしい Surround.vim をお勧めしますこれは、同様の感覚でより多くの機能を追加します)。

  • 正規表現を使用して、左端にインデントされた次の右中括弧まで削除することもできます。d/^}Enter

  • ]][[次/前の最初の列の中括弧に移動します (上で述べた正規表現と/を使用することと同等です。モーションと組み合わせると、同じ効果が得られます。?d

  • ブロックの下にいる場合は、Vim 検索の便利な「オフセット」機能を利用することもできます。d?^{?-1最初の列の左中括弧が最初に出現する前の 1 行まで逆方向に削除します。このコマンドは入力するのが少し難しいです。<leader>そこからショートカットを作ってもいいかもしれません。

この回答の多くは、同様のトピックで私が行った以前の回答から取られていることに注意してください。

于 2012-08-07T06:34:47.053 に答える
6

これらの行の直後に空白行がある場合、Vim はそれを段落として識別するので、 を使用d}して単純に削除できます (カーソルが最初の行にあると仮定します)。

于 2012-08-07T06:09:47.953 に答える
2

% でビジュアル モードを使用してみてください。

たとえば、カーソルが「サーバー」行の先頭にあるとします。

v を押してビジュアル モードにします。% を押して、ブロックの最後まで強調表示します。d を押すと削除されます。

于 2012-08-07T06:06:13.483 に答える
1

対応する括弧または中括弧を指定すると、 with を使用%して複数dの行を削除できます。

したがって、あなたが電話に出ていると仮定すると、次のserver {ことができますd%。これは通常、関数ブロック、ループ ブロック、try ブロックなど、すべてのコード ブロックに役立ちます。

同様にdip動作しますが、d}より短いです。ただし、どちらも次の空行までしか削除されません。

于 2012-08-07T06:18:09.600 に答える
1

デビッドが言ったように、彼らには多くの方法があります。ここに私が好きないくつかがあります:

  1. Vf{%dこれは、w/ の行serverにいて、視覚的な行選択を行い、を見つけてから、コマンドを介して{一致するものを見つけることを前提としています。}%
  2. set relativenumberまたはset rnu略して。これにより、カーソルに相対的な行番号がオンになります。7ddしたがって、ブロックを削除するだけで、行を数える必要はありません。
  3. VaBブロックを視覚的に選択するために使用します。つまり、行ごと{に選択します。}ビジュアル モードのままでaB、適切なブロックが選択されるまで実行を続けてから実行しdます。これは、開始または終了ではなく、ブロック内からブロックを選択できることを意味します。
  4. d}段落を削除します。ブロック内に空白行がないため、これは現在のシナリオで機能します。1 つある場合は、すべての賭けが無効になります。.ブロックが適切に削除されるまで押し続けることができますが。
  5. ブロック内で現在のブロックにジャンプできる場合は、正しいブロックに到達するまで[{実行を続けるか、ブロックを削除します[{V%dd%dd

上記の手法を使用して関数を削除することもできますが、[Mと の仲間 ( [m]m]M) を使用してメソッドの最初と最後にジャンプすることもできますが、通常は関数に対しても機能します。

詳細については

:h %
:h 'rnu'
:h aB
:h }
:h .
:h [{
:h [m
于 2012-08-07T16:39:10.210 に答える