6

次のようなものを使用して、コードを読みやすくしたいと考えています。

0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 ....

新しい行を追加して 8 ずつ増やします。

0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44 ....

特別に選択された行でこれを行うことを可能にするvimマジックを知っている人はいますか?

4

5 に答える 5

5

これは最も美しい解決策ではなく、クリーンアップ/単純化できると確信しています。最初にテキストを選択してから、次のコマンドを入力します。

:'<,'>s/\(\S\+,\s*\)\{8}/&\r/g

これは次のようなものを出力します:

0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, ...
于 2012-07-25T20:11:49.743 に答える
1

これで vim ゴルフ コンテストに勝つことはできませんが、私はこのような問題を簡単な手順で考えるのが好きです。

  1. 各要素を独自の行に配置します。
  2. 一度に 8 回線を結合する
  3. 手作業で必要なクリーンアップを行う

これを行うには、次を実行します。

:s/, /,\r/g
:'[,']g/./j 8

説明:

  • :s/, /,\r/g\rコンマの後のすべてのスペースを改行 ( )に置き換えます。
  • '[,']最近変更されたテキストの範囲です。
  • g/./{cmd}{cmd}一致するすべての行.(空白行以外)でコマンドを実行します。
  • j 8join 88行を結合することを意味する短い

警告の言葉: これは、置換されたテキストの末尾を超えた後でも 8 行を結合します']。これは、次のようなより複雑なコマンドで克服できます:'[,']g/./.,+6/,$/j 8が、それは私の好みには単純ではありません。この問題が本当に問題である場合は、元のテキストを ( 経由で:new) 新しいバッファに移動するか、少なくとも現在のバッファの一番下に移動します。変換が完了したら、元の位置に戻します。

詳細については

:h range
:h :j
:h :s
:h :g
:h '[
于 2012-07-25T22:15:14.450 に答える
1

カンニングの 1 つの方法は次のとおりです。

  1. set textwidth=48
  2. 折り返したい行を(ビジュアルモードで)強調表示します
  3. gq

テキスト幅がラップしたい場所におおよそある限り、それは問題なく機能します。リスト内のすべての項目が同じ幅である場合、このメソッドは問題ありません。

もう 1 つの、もう少し確実な方法は、マクロを定義することです。

  1. カーソルを行の先頭に移動します
  2. qwレジスタ w でマクロの記録を開始します (任意のレジスタを使用できます)。
  3. 8f,aEnter キーを押して挿入モードを終了し、qもう一度押します。
  4. @w必要な回数だけマクロを再生します。マクロを何回再生するかを自動化する賢い方法があると確信していますが、その方法はわかりません。を押し@@て、最後に実行したマクロを実行することもできます。

@zanegray が投稿したように、正規表現も機能します。

于 2012-07-25T20:16:00.903 に答える
0

これは、頭を包み込むのが簡単なマルチパートコマンドで行うことができます...

8番目のコンマの後にセミコロンを追加するマクロを作成します。

qq8f,lr;qu

テキストを選択してから、そのマクロを1000回実行します(1行あたり8000回を超える場合はそれ以上)。

:'<,'>norm 1000@q

領域を再選択し、gvすべてのセミコロンを改行で置き換えます。

gv
:'<,'>s/;/\r/g

これにより、8番目のコンマの後にセミコロンが追加され、そのセミコロンが改行で置き換えられます。

于 2012-07-25T20:17:40.467 に答える
0

したがって、このソリューションは、Zanegray のソリューションと、私の側でのいくつかの小さな調整に基づいています。

:s/\(\w\+,\s\)\{8}/&\r/g

Zanegrey のソリューションも次のように機能します。

:s/\(\S\+\s\)/&\r/g

スペースの否定に\S,.

于 2012-07-26T12:43:24.227 に答える