Відповіді:
Використання :putта range():
:put =range(1,100)
Щоб уникнути порожнього рядка вгорі ( kudos to romainl ), використовуйте :0put:
:0put =range(1,100)
Окрім чистого виду Undo :put =range(1,100)(який фактично залишає порожній рядок вгорі), ви можете, залежно від вашої ОС, використовувати одну з його команд. Наприклад, у вікні Unix / Linux:
%!seq 1 100
Вищезазначене працює, переносячи весь (порожній) буфер на seq, який ігнорує його вхід і просто виводить числа від 1 до 100. Потім Vim замінює весь буфер на seqвихід 's.
Це корисно, коли ви вже знайомі з яким-небудь способом командного рядка, щоб отримати те, що ви хочете.
Для запису, і, безумовно, не найкоротший шлях (див. Дивовижне рішення @ Undo), але послідовність натискань клавіш теж зробить це:
i1EscqaYpCtrl+aq98@a
Дозвольте мені розбити це для вас:
i1<Esc> - вставити номер 1, а потім повернутися до командного режимуqa - почати запис макросу в регістр "a"Y - скопіюйте поточний рядокp - вставити поточний рядок (курсор також переміститься до вставленої лінії)<Ctrl>a - збільшити наступне число на рядку, зробивши його 2q - припинити запис макросу (був зареєстрований "a")98@a - відтворити макрос в регістрі "a" 98 разівОсь інший підхід, який потребує новішого Vim (щось на зразок 7.4.800)
Це передбачає порожній буфер і "1" в регістрі a. Спочатку введіть 100 1 в буфер, "a100P.
Потім візуально виберіть рядки 2 до 100 :2EnterVG.
Тепер натисніть gCtrl+ A.
Прочитайте довідку за адресою :h v_g_CTRL-A
:h g_CTRL-A
Я знаю, що це питання насправді давнє, але є й інший спосіб, як ви можете це зробити. Спробуйте це:
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.
<C-r>=range(1,100).