コマンドラインモードで相対行番号を使用するにはどうすればよいですか?


16

最近、Practical Vimから、カーソルを現在の位置から移動せずに行のブロックをコピーまたは移動する方法を学びました。これはコマンドラインモードで行われます。例えば

:123,133m.  # moves lines from 123 to 133 below the cursor position.

気に入っていますが、特にファイルの行数が多すぎる場合は、長い行番号を入力するのは面倒です。

時には、移動する行がカーソルの比較的近くにあることがあります(ただし、カーソルを移動したくない、ヤンク、元の場所に戻って、貼り付けたい!)。通常モードで行うのと同様に、相対番号を使用できれば素晴らしいと思います。言っているような

現在の行の10行上にある5行をここに移動します

要するに、コマンドラインモードで相対番号を使用するにはどうすればよいですか(通常モードと同様)?

回答:


23

行が現在の行より15〜10行上にあると仮定すると、相対行番号を使用して要求を達成できます。

:-10,-15m.

残念ながら、後方範囲を指定するとき、Vimはそれが本当に必要なものかどうかを確認するように求めます。確認手順を回避するsilentには、コマンドの前に入力するか、単に転送範囲を指定します。

:-15,-10m.

ご想像の+とおり、現在の行より下の行を参照するために使用できます。

詳細なヘルプは以下で見つけることができます:

:help cmdline-ranges

1
しかし、この機能は一度も使用したことがありません。します15k d5j 10j P
-joeytwiddle

違いは、15k、5jがコマンドモードで動作することと、回答で説明されているものが挿入モードであることです。そのため、モードに基づいて適切なものを選択できます。通常、挿入モードのコマンドは、他のコマンドを実行するための選択基準です。
-Soundararajan

12

範囲内でハード番号を使用できます。

:200,300command

または相対番号:

:-27,+46command

または手動マーク:

:'a,'bcommand

または自動マーク:

:'[,'>command

または検索:

:?foo?,/bar/command

または行のショートカット:

:.,$command

または、上記のトリックの任意の組み合わせ:

:?foo?,+46command
:'a,$command
...

3

.-10,.+3任意のExコマンドcpで相対アドレス指定(例:)を使用できます。:help :range

または、LineJugglerプラグインをご覧ください。行を移動したり複製したりするためのいくつかの短いマッピングを提供し、それらすべてのマッピングはとして相対行オフセットを取り[count]ます。

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