Как я могу создать список последовательных чисел, по одному в строке?

38

Начиная с чистого листа, как я могу получить документ, который содержит

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

Чтобы было ясно, я не хочу, чтобы эти цифры отображались на полях; Я хочу, чтобы они были вставлены в сам документ.

200_success
источник

Ответы:

51

Используйте :putи range():

:put =range(1,100)

Чтобы избежать пустой строки вверху ( слава romainl ), используйте :0put:

:0put =range(1,100)
Отменить
источник
1
Или в режиме вставки с <C-r>=range(1,100).
Хотчке
18

В дополнение к Undo pure-vim :put =range(1,100)(который фактически оставляет пустую строку вверху), вы можете, в зависимости от вашей ОС, использовать одну из ее команд. Например, на коробке Unix / Linux:

%!seq 1 100

Вышеприведенное работает путем передачи всего (пустого) буфера в seq, который игнорирует его ввод и просто выводит числа от 1 до 100. Затем Vim заменяет весь буфер на seqвывод '.

Это полезно, когда вы уже знакомы с некоторым способом командной строки, чтобы получить то, что вы хотите.

derobert
источник
Это «ставит» вопрос, поэтому я считаю, что он лучше принятого. Да, вы можете заставить vim делать эту работу так же, как вы можете использовать серповидный гаечный ключ для размешивания супа. Vim - текстовый редактор, а не произвольный генератор текста; есть гораздо более очевидные инструменты для этого.
MSW
16

Для записи, и определенно не самый короткий путь (см. Потрясающее решение @ Undo), но последовательность нажатий клавиш также сделает это:

i1EscqaYpCtrl+aq98@a

Позвольте мне разобрать это для вас:

  1. i1<Esc> - введите номер 1, затем вернитесь в командный режим
  2. qa - начать запись макроса в регистр "а"
  3. Y - скопировать текущую строку
  4. p - вставить текущую строку (курсор также переместится на вставленную строку)
  5. <Ctrl>a - увеличить следующий номер в строке, сделав его равным 2
  6. q - прекратить запись макроса (был регистр "а")
  7. 98@a - повторить макрос в регистре "а" 98 раз
Прекратить постоянный вред Монике
источник
5

Здесь другой подход, который требует более нового Vim (что-то вроде 7.4.800)

Это предполагает пустой буфер и '1' в регистре a. Сначала введите 100 1 в буфер, "a100P.

Затем визуально выделите строки от 2 до 100 :2EnterVG.

Теперь нажмите gCtrl+ A.

Прочитайте помощь на :h v_g_CTRL-A

Кристиан Брабандт
источник
Вы должны добавить let @ a = "1" в свой ответ. Начинающие могут застрять, чтобы найти, как сохранить значение 1 в регистре a.
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.
DJMcMayhem
источник