4

viこのパターンでファイルを作成する必要があります。最初の行を使用してこれらの行を自動生成する方法はありますか

run 1 end
run 2 end
run 3 end
run 4 end
run 5 end
run 6 end

私はいつでもこれをExcelで実行してからテキストファイルに変換してからに切り替えることができますが、Excelに戻す必要がないようにそれviを行う方法があるかどうか知りたいと思っていました.vi

4

3 に答える 3

10

:help ctrl-a

^a は、マクロで使用できるカーソル位置の数値をインクリメントします。あなたの場合、最初の行があり、カーソルがその上にあると仮定します:

qaYpw^aq4@a

トリックを行う必要があります。これは、ヘルプ ページで概説されている手法でありw、カーソルを番号に移動するように変更されています。それを分解する:

  • qaレジスタにマクロの記録を開始するa
  • Y現在の行をヤンクする
  • pヤンク バッファを現在の位置の下に置き、新しい行の列 1 に移動します
  • w1 単語進む (数字まで)
  • ^a数を増やす
  • qマクロの記録を停止する
  • <count>@aマクロを <count> 回適用する

    もう 1 つの手法は、外部ツールを使用することです。たとえば、すでに行があり、カーソルがその上にある場合:

    !!awk '1;{for(i=0;i<5;i++){$2+=1; print}}'
    
  • 于 2012-12-05T23:52:04.040 に答える
    3

    :put!=map(range(1,6),'\"run \".v:val.\" end\"')

    于 2012-12-06T03:06:52.503 に答える
    2

    ウィリアムの答えはとてもいいです。別の解決策を投稿します(もう少し複雑です)。最初の行が既にあるとします

    Y6P
    :let g:I=1
    :%g/\d/s/\d/\=g:I/|let g:I=g:I+1
    
    • let を使用すると、変数を割り当てることができます
    • g はグローバル コマンドを実行します
    • \d は行の数字と一致します
    • s は代用
    • \d は数字を書くためです
    • \= は置換式です (参照: :help sub-replace-\=)
    • g:I は、式で置き換える変数であり、 let は変数 g:I をインクリメントします
    于 2012-12-06T00:49:45.570 に答える