Як я можу створити список послідовних чисел, по одному на рядок?


38

Починаючи з порожнього листа, як я можу отримати документ, який містить

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

Щоб було зрозуміло, я не хочу, щоб ці цифри відображалися в полі; Я хочу, щоб вони були вставлені в сам документ.

Відповіді:


51

Використання :putта range():

:put =range(1,100)

Щоб уникнути порожнього рядка вгорі ( kudos to romainl ), використовуйте :0put:

:0put =range(1,100)

1
Або в режимі вставки з <C-r>=range(1,100).
Хоцке

18

Окрім чистого виду Undo :put =range(1,100)(який фактично залишає порожній рядок вгорі), ви можете, залежно від вашої ОС, використовувати одну з його команд. Наприклад, у вікні Unix / Linux:

%!seq 1 100

Вищезазначене працює, переносячи весь (порожній) буфер на seq, який ігнорує його вхід і просто виводить числа від 1 до 100. Потім Vim замінює весь буфер на seqвихід 's.

Це корисно, коли ви вже знайомі з яким-небудь способом командного рядка, щоб отримати те, що ви хочете.


Це "неприйняття" питання, саме тому я вважаю, що це краще, ніж прийняте. Так, ви можете змусити 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 разів

4

Ось інший підхід, який потребує новішого Vim (щось на зразок 7.4.800)

Це передбачає порожній буфер і "1" в регістрі a. Спочатку введіть 100 1 в буфер, "a100P.

Потім візуально виберіть рядки 2 до 100 :2EnterVG.

Тепер натисніть gCtrl+ A.

Прочитайте довідку за адресою :h v_g_CTRL-A


Ви повинні додати let @ a = "1" у своїй відповіді. Початківці можуть застрягти, щоб дізнатися, як зберігати значення 1 в регістрі.
SibiCoder

Я бачив комбінацію gCtrl + A в інших подібних рішеннях. Однак мені не вдалося знайти пояснення того, що це робить / як це працює? Чи є у вас посилання в документації, яка пояснює, що робить g? Спасибі! Якщо я знайду пояснення, опублікую його.
кодуванняFoo

1
документація знаходиться за адресою:h g_CTRL-A
Крістіан Брабандт

Я пропустив посилання на розділ v_g_CTRL-A.
кодуванняFoo

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.