2

次のような入力テキストがあります-

(command (and (A B C) ))
(command (and (D E F) ))
(command (and (G H I) ))
...
...

テキストの一部をコピーして同じ行に貼り付けたい

(command (and (A B C) (A B C)))
(command (and (D E F) (D E F)))
(command (and (G H I) (G H I)))
...
...

VIエディタを使用して自動的に行うことはできますか?

更新: 値 A、B、C ... I... が可変長になる可能性があるという 1 つの重要なポイントを見逃したと思います。記号として使っただけです。

ありがとう !

4

4 に答える 4

3

すべての行が例と同じ長さと形式である場合:

括弧の上または内側の任意の場所にカーソルがある場合(A B C):

va(Ctrl+v

これ(A B C)で選択が完了し、ブロック選択モードになりました。任意のメカニズムを使用して、下方向の選択をブロックします。数行の場合は、下に移動するだけです。数が多い場合は、カウントを追加するか、検索 ( /) またはファイルの終わりShift+を使用できますg

すべてを選択したら:

y/)Enterp

これは、ブロック全体をヤンク (y) し、閉じ括弧に移動して、ブロックをその後に貼り付けます (p)。

行の長さが異なる場合、またはブロックとして合理的に選択できない場合

パターンの交換を使用できます。(A B C)これは、A、B、および C が括弧で囲まれ、スペースで区切られた大文字であるパターンを探している例に固有のものです。そのパターンとそれに続くスペースの一致を取り、それをそのパターンの一致、スペース、およびパターンの一致に置き換えます。

:%s/\(([A-Z] [A-Z] [A-Z])\) /\1 \1/
于 2012-10-03T13:25:26.960 に答える
1

(これらはvimで私のために働きます)

ブロック選択の使用:

14l<C-v>jj6ly7lp

マクロの使用 (長さが変化する場合):

以下を使用してマクロを記録します。

qqf(;vf)y;pj0q

必要に応じて繰り返します。

100@q

100行のファイルで機能します

于 2012-10-03T13:13:55.360 に答える
1

はい、vim でこれを行うにはいくつかの方法があります (ほとんどの場合と同様)。おそらく、クイック マクロを選択するでしょう。最初の行に移動し、qa通常モードからヒットして、「a」という名前のマクロの記録を開始します。その行を手動で編集します。もちろん、操作を一般的なものにしたいので、値を入力するだけでなく、ヤンクとプットを使用してコピーしてください。編集が完了したら、通常モードにエスケープし、j を押して次の行に移動します (これにより、次の行でマクロを実行するように設定されます)。もう一度押すqと記録が停止し、入力@aして次の行でマクロを実行し、もう一度押すと次の行で実行されます。または、一度実行すると、同じマクロを再度実行@aできます。@@実行する回数を@@数回指定することもできます。

別の方法として、コマンドで正規表現を実行することもできますが:s、それは実際の行がどのように見えるか、および正規表現がどれだけ得意であるかによって異なります。

于 2012-10-03T13:17:22.510 に答える
0

bmearns と Kev によって提供された手法を組み合わせます。

だから私がしたことは次のとおりです

  1. でマクロの記録を開始しqます。
  2. /( 開始ブラケットを見つけるため、2 番目のブラケットに移動します。
  3. n で 3 番目に移動します。
  4. v 視覚ブロックをマークする
  5. /) ブラケットの終わりを検索する
  6. y ビジュアル ブロックをコピーする
  7. n to goto next ) ブラケット
  8. 閉じ括弧の隣に移動するための 1 回限りの矢印キー
  9. p でビジュアル ブロックを貼り付けます
  10. 下矢印キーで次の行に移動します。
  11. 次の行の最初の場所に移動するためのホーム キー。
  12. qマクロの記録を停止するには
  13. @a すべての行に対して同じ操作を行います。

そして、それは完全にうまくいきました!どうもありがとう!

于 2012-10-03T13:31:54.837 に答える