vi [m] đọc phạm vi dòng từ tệp khác


9

Trên Linux, chỉnh sửa file_Btrong vim tôi muốn thêm dòng 10-25 từ file_A. Ví dụ: Một người có cả bộ Tài liệu HTML với cùng một tiêu đề và vâng, người ta có thể tạo một mẫu và bắt đầu từ đó, nhưng vẫn:

Tôi đang tìm kiếm một cách đơn giản [và thanh lịch] để chèn một loạt các dòng từ một tệp và thêm nó vào tệp mà tôi hiện đang chỉnh sửa. Trong vim.

Các giải pháp tôi tìm thấy cho đến nay nhưng không chính xác những gì tôi đang tìm kiếm, là

  • bên trong file_B lệnh :read file_Asẽ thêm * toàn bộ tệp_A * vào tệp_B. Quá nhiều
  • có bản sao và dán bên trong vim - nhưng đối với cái này thì phải mở file_A
  • bên trong file_A :10,25w! file_Bsẽ 'gửi' phạm vi dòng đã cho file_B.
    Điều này có vẻ khá gần để sao chép và dán
  • một người có thể mở nhiều cửa sổ trong vim
    Nhưng khi tôi làm việc trên màn hình 8 inch, nhiều cửa sổ khiến việc định hướng trở nên khó khăn

Vì tôi không thể tìm ra giải pháp thoải mái, tôi tự hỏi liệu tôi có hiểu nhầm điều gì không hay những cách tôi tìm thấy cho đến nay thường được sử dụng và được coi là cách tiêu chuẩn.


Xem câu hỏi SO này , câu trả lời của @ Bernhard cũng là câu trả lời được chấp nhận cho câu hỏi đó!
slm

@slm Tôi đã biết câu trả lời này, nhưng vì tôi đã không đưa nó vào danh sách các giải pháp tôi tìm thấy, cảm ơn bạn đã gợi ý. Tôi vẫn đang tìm kiếm một cái gì đó được xây dựng trong vim. Nhưng điều này dường như ngoài tầm với. Và tôi thực sự tự hỏi nếu điều này chỉ có thể đạt được thông qua các lệnh bên ngoài, bởi vì cho đến vimbây giờ, tôi đã gặp phải một số hạn chế nhỏ ở đây.
erch

@ cellar.dweller Bạn có thể thực hiện một số loại chức năng từ nó, nếu bạn thực sự muốn một cái gì đó dễ dàng hơn.
Bernhard

Câu trả lời:


11

Giải pháp tốt nhất tôi có thể đưa ra, là gọi bên ngoài sedvà kết hợp nó với:read !

:r !sed -n -e '10,25p' fileB

Không làm việc ở đây - nhưng tại sao? Đầu tiên, cảm ơn sự giúp đỡ của bạn. Những gì tôi nhận được là 'E34: không có lệnh trước' [tạm dịch] như thể vim cố gắng lặp lại một lệnh. Theo tôi hiểu, từng bước: :rviết tắt của readvim. Tôi không có kiến ​​thức về sedvà làm thế nào để sử dụng nó. Tất nhiên, tôi đã thay thế fileBbằng tệp thực tế :)
erch

@ cellar.dweller Câu trả lời của tôi đã được cập nhật bởi một người nào đó, tôi đã gặp lỗi tương tự bởi mã đó. Tôi quay lại. Xem nếu điều này làm việc cho bạn.
Bernhard

@Stephane Tốt để rút ngắn câu trả lời, nhưng đề xuất của bạn không hiệu quả.
Bernhard

Bây giờ nó hoạt động! Để thêm một chút myslef: bắt đầu bằng :10rvv sẽ đặt nội dung từ dòng mười vào [miễn là điều này tồn tại]. Làm việc giống như một nét duyên dáng bây giờ. Tuyệt quá. Cảm ơn rất nhiều!
erch

2
Ối xin lỗi. Quên về việc mở rộng của vim! Đáng lẽ phải thế :r!sed 10,25\!d. Lưu ý rằng bạn không cần -ehoặc trích dẫn, vì vậy bạn cũng có thể viết nó :r!sed -n 10,25pngắn gọn. :r sed '10,$\!d;25q'để tránh đọc toàn bộ tập tin.
Stéphane Chazelas
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.