4

ドキュメントをすばやく変更したい

00
01
10
11

のように見えるように

000
001
010
011
100
101
110
111

もちろん、ブルートフォース攻撃は可能ですが(上記のように)、これらの多くのことを実行していることがわかったので、迅速に実行したいと思います。これまでの私のアプローチは、4Y4j4Pをヤンクして貼り付けることでした

00
01
10
11
00
01
10
11

次に、各行の前に0を4回挿入するコマンドはありますか?私はそれが4、0、i、0、escのようなものであることを知っています~~私はそれを0の4ラウンド(行の左側に移動)、挿入モード、挿入0、再インターコマンドモードにしたいです。

ありがとう

4

4 に答える 4

4
  • ビジュアルブロックモードの使用:

    y3j
    <C-v>3j
    I0<Esc>
    '>
    p
    <C-v>3j
    I1<Esc>
    

    1パディングから始めて、 :Pをスキップするために使用できます。'>

    y3j
    <C-v>3j
    I1<Esc>
    P
    <C-v>3j
    I0<Esc>
    
  • Exコマンドのみを使用する:

    :,+3y<CR>
    :,+3norm! I0<CR>
    :put
    :<Up> "use commandline history to save some typing
    <Backspace>1<CR>
    
  • 置換コマンドと通常モードコマンドを組み合わせて使用​​する場合:

    y3j
    :,+3s/^/0<CR>
    p
    :<Up>
    <Backspace>1<CR>
    

これを頻繁に行う場合は、これをマクロに記録するのがおそらく最善の戦略です。その時点では、実際のパディングがどのように行われるかは実際には関係ありません。入力するのは入力だけで@xあり、マクロはおそらく瞬時に実行されるからです。

録音中に何をするかは実際には重要ではありません。例を次に示します。

qx
y3j
:,+3s/^/0<CR>
p
:,+3s/^/1<CR>
q

あなたがこれを持っていると仮定します:

[0]0
01
10
11

ヒット@xすると、上記が次のようになります。

000
001
010
011
100
101
110
111

マクロはレジスターxに保存され、次のVimセッションで引き続き使用できます。

そして、誰かが素敵なワンライナーを思い付くことができると確信しています。

編集

上記のマクロのステップバイステップの説明:

  • qx、レジスターでの記録を開始しますx(使用可能な任意のレジスターにすることができます)。

  • y3j、現在の行と次の3行をヤンクします。

  • :、説明は必要ありません。

  • ,+3、これは私たちが取り組んでいる範囲です。この範囲を定義するためのより正しい方法は、でした.,+3。範囲の開始線と終了線はコマで区切られています。

    開始行は現在の行であり、入力を節約するために省略できます。そのため、コマが残り、その後に終了行が続き、現在の行から相対的に表され+3ます。

  • s/^/0<CR>、これは単純な置換です。

    ^検索パターンのinは、「行の先頭」を意味します。最初の文字と一致しないため、このような行の前に何かを追加したい状況に最適です。

    したがって、基本的には行の前に。を付け0ます。それはあなたが望むものなら何でもかまいません。

    範囲に対して置換を実行すると、範囲の各行で置換が実行されます。ここでは、4行あるため、各行の前に。が付き0ます。

  • <CR>、は、まあ…<Enter>置換を実行するために使用されるキーです。

  • p、前にヤンクした4行を現在の行の下に貼り付けます。

  • :,+3s/^/1<CR>、以前と同じですが、1

  • q、録音を終了します。

そして、あなたのコメントに答えるために、これはあなたがこれをどのように変えるかです:

00
01
10
11

その中に:

00 0.0
01 0.0
10 0.0
11 0.0

別の「アンカー」を使用する必要があります。^は「行の先頭」、$は「行の終わり」であるため、置換は次のようになります。

:,+3s/$/ 0.0
于 2013-02-27T08:10:26.337 に答える
2

あなたが言及していると思います<c-v>(motion)I

CTRL-V      Start Visual mode blockwise.  Note: Under Windows
            CTRL-V could be mapped to paste text, it doesn't work
            to start Visual mode then, see |CTRL-V-alternative|.

I           Insert text before the first non-blank in the line
            [count] times.
            When the 'H' flag is present in 'cpoptions' and the
            line only contains blanks, insert start just before
            the last blank.

カーソルが上/左にある例の場合、これは次のようになります。

<c-v>3jI0<esc>
于 2013-02-27T08:10:04.187 に答える
2

マクロqaI0Escjを作成して実行できます4@a

しかし、あなたが達成したいのはグレイコードです。検索してください、多分それのためにいくつかのすでに書かれたスクリプトがあります(私はそれを見つけることができません)。

編集: not-only-vimを使用できる場合は、次のようにすることができます。

:%!ruby -e 'puts (0..7).map { |i| i.to_s(2).rjust(3, "0") }'

これにより、すべてのドキュメントが生成された番号に置き換えられます。長さと範囲を変更することもできます。

于 2013-02-27T08:14:36.223 に答える
0

ここで提案されているように、 visincrプラグインを使用してこれを実現することもできます。その場合、次のようにします。

  1. 空の行に0を挿入します。
  2. 0を含む8行にまたがるビジュアルブロックを作成します。
  3. を実行します:IIB 1 0

結果:

000
001
010
011
100
101
110
111
于 2013-02-27T09:39:49.680 に答える