Jak mogę wygenerować listę kolejnych numerów, po jednym w wierszu?

38

Zaczynając od pustej tablicy, jak mogę uzyskać dokument zawierający

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

Żeby było jasne, nie chcę, aby te liczby były wyświetlane na marginesie; Chcę je wstawić do samego dokumentu.

200_sukces
źródło

Odpowiedzi:

51

Użyj :puti range():

:put =range(1,100)

Aby uniknąć pustej linii u góry (od kudos do romainl ), użyj :0put:

:0put =range(1,100)
Cofnij
źródło
1
Lub w trybie wstawiania za pomocą <C-r>=range(1,100).
Hotschke,
18

Oprócz czystego vima Undo :put =range(1,100)(który faktycznie pozostawia pustą linię do góry), możesz, w zależności od systemu operacyjnego, użyć jednego z jego poleceń. Na przykład na komputerze z systemem Unix / Linux:

%!seq 1 100

Powyższe działa poprzez przesłanie całego (pustego) bufora do seq, który ignoruje jego dane wejściowe i po prostu wypisuje liczby od 1 do 100. Vim następnie zastępuje cały bufor danymi seqwyjściowymi.

Jest to przydatne, gdy znasz już sposób wiersza polecenia, aby uzyskać to, czego chcesz.

derobert
źródło
To „odsuwa” pytanie, dlatego uważam, że jest lepsze niż przyjęte. Tak, możesz sprawić, by vim wykonał zadanie, tak samo jak możesz użyć klucza półksiężyca do mieszania zupy. Vim to edytor tekstu, a nie dowolny generator tekstów; istnieją na to znacznie bardziej oczywiste narzędzia.
msw
16

Dla przypomnienia i zdecydowanie nie najkrótszej drogi (zobacz niesamowite rozwiązanie @ Undo), ale sekwencja klawiszy też to zrobi:

i1EscqaYpCtrl+aq98@a

Pozwól, że ci to podzielę:

  1. i1<Esc> - wstaw cyfrę 1, a następnie wróć do trybu poleceń
  2. qa - zacznij rejestrować makro w rejestrze „a”
  3. Y - skopiuj bieżącą linię
  4. p - wklej bieżącą linię (kursor również przejdzie do wklejonej linii)
  5. <Ctrl>a - zwiększ kolejny numer na linii, dzięki czemu będzie to 2
  6. q - zatrzymaj rejestrowanie makra (był rejestr „a”)
  7. 98@a - powtórz makro w rejestrze „a” 98 razy
Przestań krzywdzić Monikę
źródło
4

Oto inne podejście, które wymaga nowszego Vima (coś w rodzaju 7.4.800)

Zakłada to, że pusty bufor i „1” w rejestrze a. Najpierw wprowadź 100 1 do swojego bufora "a100P.

Następnie wizualnie wybierz linie od 2 do 100 :2EnterVG.

Teraz naciśnij gCtrl+ A.

Przeczytaj pomoc na :h v_g_CTRL-A

Christian Brabandt
źródło
W odpowiedzi musisz dodać let @ a = „1”. Początkujący mogą utknąć, aby znaleźć sposób przechowywania wartości 1 w rejestrze a.
SibiCoder
Widziałem kombinację gCtrl + A w innych podobnych rozwiązaniach. Jednak nie byłem w stanie znaleźć wyjaśnienia, co robi / jak działa? Czy masz w dokumentacji odniesienie, które wyjaśnia, co robi g? Dzięki! Jeśli znajdę wyjaśnienie, opublikuję je.
codingFoo
1
dokumentacja znajduje się w:h g_CTRL-A
Christian Brabandt,
Brakowało mi linku do sekcji v_g_CTRL-A.
codingFoo
2

Wiem, że to pytanie jest naprawdę stare, ale jest też inny sposób, aby to zrobić. Spróbuj tego:

99o<esc>:%s/^/\=line('.')<cr>

99o<esc>otworzy tylko 100 pustych linii. Następnie uruchamiamy polecenie zastępcze:

:%                  " On every line
  s/                " substitute
    ^/              " the start of the line. (This will always match no matter what)
      \=            " Evaluate:
        line('.')   " The current line.
DJMcMayhem
źródło