行ごとに1つずつ、連続番号のリストを生成するにはどうすればよいですか?


38

白紙の状態から始めて、以下を含む文書を入手するにはどうすればよいですか

1
2
3
4
5
6
7
8
9
10
…
100

明確にするために、これらの数値を余白に表示したくないのです。それらをドキュメント自体に挿入してほしい。

回答:


51

:putおよびを使用しrange()ます。

:put =range(1,100)

上部の空白行(romainlに対するkudos)を回避するには、次を使用します:0put

:0put =range(1,100)

1
またはを使用した挿入モード<C-r>=range(1,100)
-Hotschke

18

Undoのpure-vim :put =range(1,100)(実際には上に空白行が表示される)に加えて、OSに応じてそのコマンドの1つを使用できます。たとえば、Unix / Linuxボックスの場合:

%!seq 1 100

上記は、(空の)バッファー全体をにパイプすることseqで機能します。入力を無視し、1から100までの数字を出力します。Vimはバッファー全体をseqの出力に置き換えます。

これは、必要なものを取得するためのコマンドラインの方法に既に慣れている場合に便利です。


これは、「受け入れられた質問よりも優れていると思う理由である」という質問を「無視」します。はい、三日月型のスパナを使ってスープをかき混ぜるのと同じように、vimに仕事をさせることができます。Vimはテキストエディターであり、任意のテキストジェネレーターではありません。そのためのもっと明らかなツールがあります。
msw

16

記録のために、そして間違いなく最短の方法ではありませんが(@Undoのすばらしい解決策を参照)、キーストロークのシーケンスもそれを行います:

i1EscqaYpCtrl+aq98@a

それをあなたのために分解させてください:

  1. i1<Esc> -番号1を挿入し、コマンドモードに戻ります
  2. qa -レジスタ "a"でマクロの記録を開始します
  3. Y -現在の行をコピーする
  4. p -現在の行を貼り付けます(カーソルも貼り付けられた行に移動します)
  5. <Ctrl>a -行の次の番号を増やして2にする
  6. q -マクロの記録を停止します(レジスタ "a"でした)
  7. 98@a -レジスタ "a"のマクロを98回再生する

5

新しいVim(7.4.800など)が必要な別のアプローチを次に示します。

これは、空のバッファとレジスタaの「1」を想定しています。まず、バッファに100 1を入力します"a100P

次に、行2から100までを視覚的に選択します:2EnterVG

次にgCtrl+を押しAます。

でヘルプを読む :h v_g_CTRL-A


回答にlet @ a = "1"を追加する必要があります。初心者は、レジスタaに値1を保存する方法を見つけるために立ち往生するかもしれません。
-SibiCoder

他の同様のソリューションでgCtrl + Aコンボを見てきました。しかし、私はそれが何をしているのか/どのように機能するのかの説明を見つけることができませんでしたか?ドキュメントにgの機能を説明するリファレンスがありますか?ありがとう!説明を見つけた場合は投稿します。
codingFoo

1
ドキュメントは次の場所にあります:h g_CTRL-A
クリスチャンブラバンド

v_g_CTRL-Aセクションへのリンクを見逃していました。
codingFoo

2

私はこの質問が本当に古いことを知っていますが、別の方法もあります。これを試して:

99o<esc>:%s/^/\=line('.')<cr>

99o<esc>100行の空白行を開くだけです。次に、代替コマンドを実行します。

:%                  " On every line
  s/                " substitute
    ^/              " the start of the line. (This will always match no matter what)
      \=            " Evaluate:
        line('.')   " The current line.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.