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.

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)

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.


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

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


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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.