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


38

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

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

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

Ответы:



18

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

%!seq 1 100

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

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


Это «ставит» вопрос, поэтому я считаю, что он лучше принятого. Да, вы можете заставить 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.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.