コマンドラインから行の範囲を選択する


8

コマンドラインから一定範囲の行を(視覚的に)選択する必要があります。

たとえば、次のコマンド:?^\s*for?+,/^\s*end/- pは、a forend(の間にある)の間に含まれるすべての行を出力します。印刷操作を実行する代わりに、これらの行が強調表示されたビジュアルモードに切り替えたいと思います。マニュアルで検索しましたが、そのような元のコマンドは見つかりませんでした。


「独占的」という意味ですか?
リッチ

あなたが正しい!私は質問を編集しました
nicmus

回答:


7

ビジュアルモード選択の境界は、<および>マークによって定義されます。

したがって、次のコマンドは、5行目から10行目までを選択してビジュアルモードに入ります。

 :5mark < | 10mark > | normal gvV
  • :5mark < 選択範囲の開始を5行目に設定します
  • :10mark > 選択範囲の終わりを10行目に設定します
  • gv 上で定義された領域が選択された状態でビジュアルモードに入ります。
  • V 選択範囲を線状にします。

あなたはに任意のVimの範囲を渡すことができます:markコマンド:以下は正規表現を使用してビジュアルモードに入りますfooと、bar選択領域の境界を定義するには:

:execute search("foo") . "mark <" | execute search("bar") . "mark >" | normal gvV

次のコマンドは、上記のより単純なバージョンですが、カーソルの位置に依存しています。

/foo/mark < | /bar/mark > | normal gvV

詳細については、以下を参照してください。


ありがとう!私は次のように解決しました?^\s*for?+ mark < | /^\s*end/- mark > | norm gv
nicmus

@nicmusああそう、あなたの特定の用途のためにそれはより簡単です。回答を更新しました。
リッチ

ただ、不思議に思われるかもしれません任意の将来の読者のために、+そして-選択を行うために範囲を調整している@ nicmusさんのコメントではない正規表現と一致する行を含んでいます。(参照:help range
リッチ

.連結演算子は、本当にここに私を投げた誰かが同じことを感じている場合の例です。:execute "l" . "s"同じ出力を生成します:ls
toraritte
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.