Tại sao tôi không thấy sự khác biệt giữa hai tệp khác nhau trong chế độ chèn trong vim?


8

Hãy tạo hai tệp:

$ echo -n 'test' > test.txt
$ wc test.txt 
0 1 4 test.txt

Các tập tin test.txtkhông chứa dòng mới.

$ echo 'test' > test_n.txt
$ wc test_n.txt 
1 1 5 test_n.txt

Các tập tin test_n.txtcó chứa dòng mới.

Trên hai tập tin rõ ràng khác nhau, nhưng bản xem trước của cả hai tập tin trong vimtrong chế độ chèn không chứa bất kỳ sự khác biệt:

$ vim test.txt

nhập mô tả hình ảnh ở đây

$ vim test_n.txt

nhập mô tả hình ảnh ở đây

Tại sao không có sự khác biệt (dòng mới hoặc một số khác biệt đặc biệt)?

Và tôi có thể làm gì để thêm hoặc xóa một ký tự bổ sung như vậy vimtrong chế độ chèn ?


4
": set list" sẽ cho thấy sự khác biệt và có một chế độ mà bạn có thể kiểm tra. Cả hai đều nằm trong tệp trợ giúp.
Thomas Dickey

Cảm ơn bạn @ThomasDickey Tôi không biết tùy chọn này trước đây.
simhumileco

1
@ThomasDickey nếu bạn muốn thêm câu trả lời thì đó có thể là câu trả lời được chấp nhận. Cảm ơn bạn.
simhumileco

2
@filbranden xin vui lòng không gửi câu trả lời trong ý kiến. Câu trả lời trong các bình luận không thể được bình chọn bởi cộng đồng và không đánh dấu câu hỏi là đã trả lời.
terdon

2
@ThomasDickey xem ở trên. Xin vui lòng gửi đó như là một câu trả lời.
terdon

Câu trả lời:


12

vim có chế độ "eol" (cho dòng cuối) để cho biết phải làm gì nếu dòng cuối cùng trong tệp thiếu tự dòng mới . Bạn có thể thấy tất cả các cài đặt chế độ trong vim (hoặc bất kỳ chương trình nào như vi) bằng cách

:set all

POSIX vi không có tính năng này: các tệp có độ dài bằng 0 hoặc dòng mới. Đó là bởi vì POSIX vi chỉ xử lý các tệp văn bản, theo định nghĩa là các dòng kết thúc bằng dòng mới. Trong một kiểm tra nhanh, nvi và elvis không có chế độ cho việc này. Trong nhận xét của tôi, tôi đã quên một chi tiết của vim: không giống như vile, một "danh sách tập hợp" không dễ dàng hiển thị dòng mới bị thiếu. Đây là những gì tôi thấy trong vim:

ssss$
test$
~
~

trong khi hèn hạ:

ssss^J
test
~
~

Đối với trình chỉnh sửa, bạn có thể đọc tệp trong, thay đổi chế độ , ví dụ:

:set noeol

và viết tệp ra, để có một dòng mới trên tệp đã cập nhật. Thay vì hiển thị trực tiếp, bạn có thể sửa đổi dòng trạng thái của vim để hiển thị thông tin này. Theo mặc định, nó dường như không làm điều này, nhưng một số trình đóng gói đã tùy chỉnh điều này, ví dụ:

"foo" [noeol] 2L, 9C                                          1,1           All

Một trong những ý kiến ​​gợi ý sử dụng dấu "?" bổ nghĩa của setlệnh, vd

:set eol?

có thể hiển thị một cái gì đó như thế này:

noendofline                                                   2,1           All

nhưng trong chế độ chèn, điều đó được thay thế bằng

-- INSERT --                                                  2,1           All

vì vậy dòng trạng thái có vẻ là nơi thích hợp để duy trì thông tin này.

Các tính năng đã có một thời gian:

  • Các eoltính năng đầu tiên xuất hiện trong vim 2.4 (tháng 7 năm 1994), theo một lời nhận xét trong mã nguồn của nó.

  • newlineChế độ của vile xuất hiện vào tháng 7 năm 1993 .

( nvi, elvis, vim và vile đều xử lý các tệp nhị phân ngoài các tệp văn bản của POSIX vi ).


2
gần 20 năm sử dụng vim, và tôi vẫn học được những điều mới về nó. và tôi vẫn còn sợ emacs. : D
Tim Kennedy

1
Trong vim, bạn cũng có thể làm :set eol?để xem liệu eol đang bật hay tắt, vì vậy bạn không phải xem qua tất cả đầu ra của :set all.
Kevin

Một cách ít gây nhầm lẫn hơn khi nói "các tệp có độ dài bằng 0 hoặc có một dòng mới" là "tất cả các dòng kết thúc bằng một dòng mới và một tệp văn bản là một chuỗi có 0 hoặc nhiều dòng".
R .. GitHub DỪNG GIÚP ICE
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.