異なる行の異なる長さのテキストを選択するにはどうすればよいですか?


10

次のテキストがあると仮定します。

aaa-dd-e:「aaa」、
bb-x:「bb」、
c-9:「c」

以下のような選択をしたい:

aaa-dd-e:「aaa」、
bb-x:「bb」、
c-9:「c」

cvを使用してビジュアルブロックを作成しようとしましたが、最初の列に選択を作成し、「f:」を押した後(上記のように、選択をすべての行のコロンマークに展開するつもりでした)、得られるものは次のとおりです。

aaa-dd-e:「aaa」、
bb-x:「bb」、
c-9:「c」

選択は最初のコロンで停止し、長方形を作成します。


6
その選択で何を達成したいのか、別の方法があるかもしれません
Arjen Dijkstra 2015年

文字で区切られている場合は、最初にブロックを再配置してから選択することができます。参照:VIMの最初のセパレータでのみテキストを
揃える

回答:


6

選択は一般的に目的を達成するための手段であり、Vimの場合はそもそも選択が必要でないことが多いためです。

JSON以外のファイルのプロパティ名を引用符で囲んで、適切なJSONに変換したいとします。

  1. 文字単位または行単位で変更する行を選択します。これは問題ではありません。
  2. :'<,'>norm I"^[f:i"'<,'>は自動的に挿入され、^[で取得されます<C-v><Esc>)。

美しいサラウンドプラグインがある場合、ステップ2は次のようになります。

:'<,'>norm ^vt:S"

置換すると、ステップ2は次のようになります。

:'<,'>s/^\s*\([^:]*\):/"\1"

皆さんは正しいですが、今では視覚的な選択はおそらく不要だと思います。またはの助けを借りて、:g/regex/normやりたいことを簡単に達成できます。
アーロンシェ2017

選択したブロック全体をシステムのクリップボードに入れて別のファイルに貼り付ける方法はありますか?
アーロンシェ2017

もちろん。Vimが、対象とするクリップボードに応じて、"+yまたは"*yで実行できるクリップボードサポートでコンパイルされていると仮定します。この辺りには関連する質問がたくさんあります。
romainl 2017

14

Vimは長方形のブロック単位の選択のみをサポートします$

複数の選択をエミュレートできるプラグイン(vim multiple cursorsなど)がありますが、純粋なVimコマンドなど:global:substitute(残念ながら言及しなかった)実際の目標を達成することもできるはずです。各行の選択に一致する式)、またはマクロの繰り返しによる(各行の選択をカバーする特定のモーションがある場合)。


それらの行をカットして別のバッファーに貼り付けたい場合はどうなりますか?
アーロンシェ

1

リングに別の帽子を投げるだけで、本当に視覚的な選択を使用したい場合は、Tabularプラグインを使用してコロンを並べ、視覚的な選択を行うことができます。

元のテキストを使用する場合:

aaa-dd-e: "aaa",
bb-x: "bb",
c-9: "c"

:Tab /:\zs 以下のように、コロンの後にすべてを揃えます

aaa-dd-e:  "aaa",
bb-x:      "bb",
c-9:       "c"

そして、あなたはあなたの視覚的なブロック選択をすることができます。

ただし、他の人が言ったように、この状況ではおそらく視覚的な選択は必要ありません。使用normまたは置換を行うと、視覚的な選択に煩わされることなく、必要な機能を実現できます。


1

驚くほど簡単なこの問題の解決策を見つけました!コピーしたいテキストの選択の下からビジュアルブロックモードを開始し、上方向に選択します!上に行くとブロックが拡大しますが、下にハイライトすると選択範囲が狭くなるように見えます。


しかし、この方法では常に長方形のブロックになりますよね?私が読んだように、これはOPが望んでいることではありません(彼らはビジュアルブロックモードを試したと述べています)。
マーティンTournoij

いいえ。すべてのラインが同じ長さであれば、常に長方形のブロックになります。一番下から始めて上向きに強調表示し、次に$を押して行の終わりに移動すると、強調表示されたすべての行が行末まで強調表示されることがわかりました。
Arthur Bowers
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.