カーソル位置の後の行の終わりまで削除する最も速いシーケンスは何ですか?
例:
この行をもっと早く削除したい
シーケンス:5eD単語の最後の文字を削除しますline
この林を削除したい
vimで移動すると、単語の最初または最後の文字に移動することが多く、行末まで削除するたびに1つ以上のキーストロークで移動する必要があります(上記の例では、右に1つのモーションを追加します)。5elD)。より効率的な方法はありますか(単語の終わりの後に移動するか、カーソルの後に削除することによって)?
カーソル位置の後の行の終わりまで削除する最も速いシーケンスは何ですか?
例:
この行をもっと早く削除したい
シーケンス:5eD単語の最後の文字を削除しますline
この林を削除したい
vimで移動すると、単語の最初または最後の文字に移動することが多く、行末まで削除するたびに1つ以上のキーストロークで移動する必要があります(上記の例では、右に1つのモーションを追加します)。5elD)。より効率的な方法はありますか(単語の終わりの後に移動するか、カーソルの後に削除することによって)?
回答:
Dは、一方の端にカーソルがあり、もう一方の端にある行の最後の印刷可能な文字を含むモーションに対して機能する包括的なコマンドです。AFAIKには、包含コマンドを排他コマンドに、またはその逆に変換する組み込みの方法はありません。
最も重い解決策は、独自のオペレーターとモーション/テキストオブジェクトを定義することです。
やや軽い解決策は、これらのコーナーケースのマッピングを定義することです。
さらに軽量な(ただし退屈な)解決策は、ビジュアルモードでさらに数回のキーストロークを費やすことです。
または、少しだけ「アジャイル」な方法で移動することもできます。
5f D
あなたが望むものを達成するための複数の方法があります:
5elD
6f D
6wDx
6whD
# ... probably others too
これらはすべて、キーストロークを+1するだけで済みます。
現在位置+1からの削除が可能であった場合、現在位置-1からの削除も要求することは理にかなっています。たとえば、現在の行からファイルの終わりまで+ 1、-1を削除するなど、他のコマンドについても疑問を投げかけます。
これはどのように機能するのでしょうか?考えられる方法は2つだけです。
だから、私は現在の機能よりも優れたものを得る方法がわかりません:-)
次の文字から削除する「アトミック」コマンドがないことは少し残念だと私は同意します。私はあなたが尋ねていることの実用的な使い方を理解しています:テキストを短く切るとき、行末に末尾の空白を残したくないので、スペース文字から始めて削除したいことがよくあります(Gitはそれについて不平を言っています、例えば)。そして、wそしてe、ワードジャンプコマンドは、このために非常に適していないw最初の文字にジャンプし、e最後の文字にジャンプなどで明示的な検索を除いて、単語の後にスペースにジャンプする近道はありませんf。だから私はあなたの必要性を理解し、共有さえします。これが既存の機能のどこに絞り込めるかわかりません。
私が考えることができる最良の代替案は、アクションをマクロに記録することです、としましょうd。単語の最後(最後の文字)に、次のように記録します。
qdlDq
次に、で別の単語の終わりにこのアクションをやり直すことができます@d。繰り返し行うために、あなたは行うことができます@@。繰り返し行う場合、これはを入力するより高速ですlDが、これはあなたの好みに依存するかもしれません。それを繰り返し実行しない場合、マクロは実際には役に立ちません。それは、とにかく同じ数のキーストローク(+マクロの作成)だからです。
6wD最後の単語の後にスペースを残しますが、少なくとも表示されているテキストは希望どおりです。6wDxは仕事を終えますが、それからあなたは再び4回のキーストロークにいます。