前の行の「=」までコンテンツを逆方向に削除するにはどうすればよいですか?


9

私はjavascriptコードの例を使用します:

1        var a = 1;
2        var b = |{};

カーソルが|(カーソルの形状がブロックの場合は文字「{」の上)の位置にaあります。オブジェクトを割り当てたいので、次のように変更します。

1        var a = {};

では、カーソルが「{」の上にあることを知りたいのですが、「{」の前のすべての内容を1行目の「=」記号の後の空白まですばやく削除するにはどうすればよいですか。

他の通常のエディターでは、バックスペースキーを押してコードを削除します。しかし、私はこれをvimで達成する方法はありません。


iバックスペースキーを押して使用することもできます。誰もあなたのためにそれを撃ちません。おもう。
elyashiv 2015年

1
しかし、バックスペースは上記の行の文字を削除しません
アーロンシェン

3
@AaronShenそれはあなたの「バックスペース」設定に依存します。含まれている場合eol、バックスペース改行削除します。またstart、設定に含める必要があります。(を参照:help backspace)。ただし、この方法は使用しないでください。以下の回答で詳述されているいくつかのはるかに高速な方法があります。
リッチ

回答:


20

私が質問を完全に理解しているかどうかはわかりませんがvar a = {};、だけになるまで削除したい場合 は、カーソル位置から、d?1Enter

dが動き、/前方検索または?後方検索の検索パターンを指定できます。

これを示す小さなgifは次のとおりです。

ここに画像の説明を入力してください


1
Enter入力後にを押す必要があることは、おそらく言及する価値がありますd?1
リッチ

@Rich本当にありがとう、私はそれを含めるように答えを更新しました。
akshay

1
そのシェルはどのフォントを使用していますか?
Chris Burt-Brown

@ ChrisBurt-Brown:テルミナス
akshay

10

vim(クラシックviではなく)を使用している場合、例ではvkd(またはvkx)を使用できます。

  • v 「ビジュアル」(選択)モードにします
  • k 1行上に移動してカーソルを「1」に置き、削除する部分を選択します
  • dまたはx選択を削除します

5

削除

この特定の例でdgkは、これが最も簡単な方法の1つです。

Akshayが説明したように、このdコマンドの後にモーションを続けることができ、カーソルが始まる位置とモーションが移動する位置との間のすべての文字が削除されます。

コードでは、カーソル位置と同じ列の間にあるすべての行を1行上に削除したいので、カーソルを上方向にgk動かすと(演算子と組み合わせて使用​​すると直線ではなくなります)、目標が達成されます。

編集: BobH はコメントで、このメソッド'wrap'はが設定されている場合にのみ機能することを指摘しています。そのため、常にラップセットがない限り、このページの他の回答で提案されているように、dvkまたはを使用した方がよいでしょうvkd

単語を逆方向に削除

d5bまたは:またはを使用しd4Bて、それぞれ5ワードまたは4 WORD逆方向に削除することもできます。(1;は1つの単語ですが、2つの通常の単語です)。


dkが現在の行と上の行の両方を完全に削除する理由
Aaron Shen

@AaronShenいいえ。それを試してみてください。
リッチ

1
@Richそれがあなたのために働くなら、あなたはその削除運動を可能にする設定を持っています。私はそれをテストしたところ、vim -u NONE -U NONE両方の行が削除されました。
Vitor 2015年

@Vitorその通りです。今、どの設定がそれを行うのかを理解しようとしています。
リッチ

1
ところで、それはgk明らかに:set wrap文字通りに必要とするように使用することがわかります(やや不可解に)。なぜこれが他のすべての人のために働いているように見えたのか、私にとってはそうではなかったのかを理解できませんでしたgk。唯一の手がかりは、の主な意味がgk折り返された行に関係していることでした。ラップオン(ちょっと気まぐれに)を設定してみると、出来上がりました。
BobH 2015年

1

まだコメントできないので、新しい答えを出さなければなりません。d kRichから提供されたキーは、nocompatibleオプションを使用しても機能しません。理由としては、モーションkがvimによってライン単位であると見なされることが考えられます。その場合、両方のラインが削除されます。から:help d

d {motion}コマンドの例外:モーションが線状でない場合、モーションの開始と終了は同じ行になく、モーションの開始前と終了後のブランクのみがある場合、削除は次のようになります。ラインワイズ。つまり、削除すると、残っていると予想される空白行も削除されます。| o_v |を使用します 演算子がモーションを文字単位に強制する

それはまた、救済策を示します:dvkモーションをキャラクターごとに強制するために使用します。これは私にとってはトリックです。

私は以前o_vを知らなかったので、ここにあります:help o_v

v

オペレーターの後で、モーションコマンドの前に使用する場合:モーションが直線的である場合も、オペレーターにキャラクター単位で作業させます。動きが直線的であった場合、| exclusive |になります。モーションがすでにキャラクタ単位であった場合は、包括的/排他的を切り替えます。これを使用して、排他的モーションを包括的にしたり、包括的モーションを排他的にしたりできます。


「互換性がない」ことは、完全な赤いニシンでした。私は馬鹿なので、テストしているときにめちゃくちゃになりました。
リッチ

dgkを使用することもできます。ここで、gkも排他的であり、行ごとではありません。
MS.Kim
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.