Làm cách nào tôi có thể tạo danh sách các số liên tiếp, mỗi số một dòng?


38

Bắt đầu từ một bảng trống, làm thế nào tôi có thể có được một tài liệu có chứa

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

Để rõ ràng, tôi không muốn những con số này được hiển thị ở lề; Tôi muốn chúng được chèn vào tài liệu.

Câu trả lời:


51

Sử dụng :putrange():

:put =range(1,100)

Để tránh dòng trống ở trên cùng ( kudos to romainl ), sử dụng :0put:

:0put =range(1,100)

1
Hoặc trong chế độ chèn với <C-r>=range(1,100).
Hotschke

18

Ngoài Undo thuần-vim :put =range(1,100)(mà thực sự để lại cho bạn một dòng trống lên trên cùng), bạn có thể, tùy thuộc vào hệ điều hành của bạn, sử dụng một trong các lệnh của nó. Ví dụ: trên hộp Unix / Linux:

%!seq 1 100

Ở trên hoạt động bằng cách chuyển toàn bộ bộ đệm (trống) sang seq, bỏ qua đầu vào của nó và chỉ xuất các số từ 1 đến 100. Vim sau đó thay thế toàn bộ bộ đệm bằng seqđầu ra của.

Điều đó hữu ích khi bạn đã quen thuộc với một số cách dòng lệnh để có được những gì bạn muốn.


Câu hỏi "không có nhiệm vụ" này là lý do tại sao tôi nghĩ rằng nó tốt hơn câu hỏi được chấp nhận. Vâng, bạn có thể làm cho vim thực hiện công việc, giống như bạn có thể sử dụng cờ lê hình lưỡi liềm để khuấy súp. Vim là một trình soạn thảo văn bản, không phải là trình tạo văn bản tùy ý; có nhiều công cụ rõ ràng hơn cho điều đó.
msw

16

Đối với bản ghi và chắc chắn không phải là cách ngắn nhất (xem giải pháp tuyệt vời của @ Undo), nhưng chuỗi các lần nhấn phím cũng sẽ làm điều đó:

i1EscqaYpCtrl+aq98@a

Hãy để tôi phá vỡ điều đó cho bạn:

  1. i1<Esc> - chèn số 1, sau đó quay trở lại chế độ lệnh
  2. qa - bắt đầu ghi một macro trong đăng ký "a"
  3. Y - sao chép dòng hiện tại
  4. p - dán dòng hiện tại (con trỏ cũng sẽ di chuyển đến dòng đã dán)
  5. <Ctrl>a - tăng số tiếp theo trên dòng, làm cho nó 2
  6. q - dừng ghi macro (đã đăng ký "a")
  7. 98@a - phát lại macro trong đăng ký "a" 98 lần

5

Đây là một cách tiếp cận khác, cần một Vim mới hơn (đại loại như 7.4.800)

Điều này giả sử một bộ đệm trống và '1' trong đăng ký a. Đầu tiên nhập 100 1 vào bộ đệm của bạn , "a100P.

Sau đó, trực quan chọn dòng 2 đến 100 :2EnterVG.

Bây giờ nhấn gCtrl+ A.

Đọc trợ giúp tại :h v_g_CTRL-A


Bạn phải thêm let @ a = "1" trong câu trả lời của bạn. Người mới bắt đầu có thể bị mắc kẹt để tìm cách lưu trữ giá trị 1 trong đăng ký a.
SibiCoder

Tôi đã thấy kết hợp gCtrl + A trong các giải pháp tương tự khác. Tuy nhiên tôi đã không thể tìm thấy một lời giải thích về những gì nó đang làm / làm thế nào nó hoạt động? Bạn có một tài liệu tham khảo trong tài liệu giải thích những gì g làm? Cảm ơn! Nếu tôi tìm thấy một lời giải thích tôi sẽ đăng nó.
mã hóa

1
tài liệu có tại:h g_CTRL-A
Christian Brabandt

Tôi đã bỏ lỡ liên kết đến phần v_g_CTRL-A.
mã hóa

2

Tôi biết câu hỏi này thực sự cũ, nhưng có một cách khác bạn cũng có thể làm được. Thử đi:

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

99o<esc>sẽ chỉ mở ra 100 dòng trống. Sau đó, chúng tôi chạy một lệnh thay thế:

:%                  " On every line
  s/                " substitute
    ^/              " the start of the line. (This will always match no matter what)
      \=            " Evaluate:
        line('.')   " The current line.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.