Vi(m)で数列を生成する方法はありますか?
たとえば、ファイル内のランダムな行(vimで開かれます)から、Row-i-と言います-iからRow-jに1から始まり、j-i + 1に始まり、ステップ増分が1になりますか?
ファイルに次の行があるとします。
this is line #1
this is line #2
this is line #3
this is line #4
this is line #5
this is line #6
this is line #7
this is line #8
this is line #9
this is line #10
行番号4から行番号8に、番号1から番号5までの番号シーケンスのプレフィックスを付けます。操作後、結果のファイルは次のようになります。
this is line #1
this is line #2
this is line #3
1 this is line #4
2 this is line #5
3 this is line #6
4 this is line #7
5 this is line #8
this is line #9
this is line #10
これが可能な場合、ステップ数を増やす方法はありますか? ..たとえば、シーケンスは2、4、6、8、10である必要があります。つまり、ステップカウントは2です。
ご注意ください:
この SO post は似ていますが、同じではありません。
で複数の行を選択します V(Shift-v)、次のコマンドを入力します:
:let i=1 | '<,'>g/^/ s//\=i . " "/ | let i+=2
タイプ:help sub-replace-expression
続きを読む。
複雑な構造の代わりに、単にマクロを使用して CTRL-a 先頭の数字をインクリメントする関数。サンプルデータ:
aaa
bbb
ccc
最初に開始番号を挿入しますおよびスペース:
1 aaa
bbb
ccc
次に、このマクロを1行目に記録します(<C-a>
はCTRL-a):
qq0yf 0j0P0<C-a>q
説明:
qq
:マクロをレジスタq
に記録します0
:最初の列に移動します。yf
:最初のスペースまですべてをヤンクします(最初の行には1
とスペースがあることに注意してください)。0jP
:下に移動して、行の先頭にパターンを貼り付けます。0<C-a>
:最初の列に移動し、番号を1つずつ増やします。q
:マクロの記録を終了します。これは与える:
1 aaa
2 bbb
ccc
これで、@q
を使用して、必要な限りこのマクロを適用できます。 2を増やす必要がある場合は、 CTRL-aCTRL-a 一度だけではなくこれで、このマクロを連続した行に適用できます。次に例を示します。
:.,$norm @q
ファイルの残りの部分に先頭行番号を追加します。
:4,8s/^/\=line(".")-3." "
あなたがしたいことをします
count = 2が必要な場合:
:4,8s/^/\=2*(line(".")-3)." "
これにより、2,4,6,8,10が得られます
私の例では行番号がハードコードされているため、Vを使用して変更する行を選択できます。
ビジュアルモードでターゲット行を選択し、Exコマンドを実行します
:'<,'>s/^/\=(line('.')-line("'<")+1).' '
汚いトリックがありますが、人生はこれらで構成されています。 :)
ESC :r! for i in $(seq 1 10); do echo "This is line \#${i}"; done
クロスプラットフォームではありません。
Nexus プラグインは、次のように使用されるシリーズタイプとそのタイプのオブジェクトs1を提供します。
:4,8s/^/\=s1.next().' '/
Nexusには、最初の.next()結果として0を生成するs0 Seriesオブジェクトも付属しています。 s0とs1は両方とも1ステップの増分を使用します。すべてのSeriesオブジェクトには、初期値に戻す.reset()メソッドがあります。新しいシリーズオブジェクトは、次の呼び出しのように作成できます。
let s2 = Series(0, 2)
2番目の要求を満たす2ステップのオブジェクトを作成します(収量:2、4、6、8 ...)
提案されたソリューションはすべて覚えるのが難しすぎると思います。一度使用すればよいのですが、使用するたびにすべての詳細を確認する必要があります(1日に1回程度しか使用しない場合)。
visual incrementing script はインストールと使用が本当に簡単だとわかりました。 vimにインストールしたら、0の列を生成し、Ctrl-Vでそれを選択してコマンド:Iを書くだけです。その後、各行で増加する数値が自動的に生成されます。他の機能もあります。
これは、列0とは異なる位置でも機能するため、より一般的な問題を解決します。列はCtrl-Vで選択可能である必要があります。
(vimがPerlをサポートしている場合-多くのLinuxディストリビューションでデフォルト):ビジュアルモード(V)で行を選択し、実行します
:perldo s/^/++$z . " "/e