Відповіді:
Використання :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)
.