Mengapa saya tidak melihat perbedaan antara dua file berbeda dalam mode insert di vim?

8

Mari kita membuat dua file:

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

File test.txttidak mengandung baris baru.

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

File tersebut test_n.txtberisi baris baru yang tertinggal.

Di atas dua file yang jelas berbeda, tetapi preview kedua file di vimdalam modus insert tidak mengandung perbedaan:

$ vim test.txt

masukkan deskripsi gambar di sini

$ vim test_n.txt

masukkan deskripsi gambar di sini

Mengapa tidak ada perbedaan (baris baru atau perbedaan khusus)?

Dan apa yang bisa saya lakukan untuk menambah atau menghapus karakter tambahan seperti itu vimdalam mode insert ?

simhumileco
sumber
4
": set list" akan menunjukkan perbedaannya, dan ada mode yang dapat Anda periksa. Keduanya ada di file bantuan.
Thomas Dickey
Terima kasih @ThomasDickey saya tidak tahu opsi ini sebelumnya.
simhumileco
1
@ThomasDickey jika Anda ingin menambahkan jawaban, itu mungkin jawaban yang diterima. Terima kasih.
simhumileco
2
@filbranden tolong jangan mengirim jawaban dalam komentar. Jawaban dalam komentar tidak dapat dipilih oleh komunitas dan tidak menandai pertanyaan sebagai dijawab.
terdon
2
@ThomasDickey lihat di atas. Silakan posting itu sebagai jawaban.
terdon

Jawaban:

12

vim memiliki mode "eol" (untuk end-of-line) untuk memberi tahu apa yang harus dilakukan jika baris terakhir dalam file tidak memiliki karakter baris baru . Anda dapat melihat semua pengaturan mode dalam vim (atau program apa pun seperti vi) dengan

:set all

POSIX vi tidak memiliki fitur untuk ini: file memiliki panjang nol, atau memiliki baris tambahan. Itu karena POSIX vi hanya berurusan dengan file teks, yang menurut definisi adalah baris yang diakhiri dengan baris baru. Dalam pemeriksaan cepat, nvi dan elvis tidak memiliki mode untuk ini. Dalam komentar saya, saya lupa detail vim: tidak seperti vile, ": set list" tidak dengan mudah menunjukkan baris baru yang hilang. Inilah yang saya lihat di vim:

ssss$
test$
~
~

sementara dalam keji:

ssss^J
test
~
~

Untuk salah satu editor, Anda dapat membaca file, mengubah mode , misalnya,

:set noeol

dan tulis file keluar, untuk mendapatkan baris baru pada file yang diperbarui. Daripada menunjukkannya secara langsung, Anda dapat mengubah garis status vim untuk menampilkan informasi ini. Secara default, tampaknya tidak melakukan ini, tetapi beberapa paket telah menyesuaikan ini, misalnya,

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

Salah satu komentar menyarankan menggunakan "?" modifikator dari setperintah, misalnya,

:set eol?

yang mungkin menunjukkan sesuatu seperti ini:

noendofline                                                   2,1           All

tetapi dalam mode insert, yang diganti oleh

-- INSERT --                                                  2,1           All

jadi baris status tampaknya tempat yang tepat untuk memelihara informasi ini.

Fitur-fiturnya sudah ada beberapa saat:

  • The eolfitur pertama kali muncul di vim 2.4 (Juli 1994), menurut komentar dalam kode sumbernya.

  • newlineMode vile muncul pada Juli 1993 .

( nvi, elvis, vim dan vile semua menangani file biner di samping file teks POSIX vi ).

Thomas Dickey
sumber
2
hampir 20 tahun menggunakan vim, dan saya masih belajar hal-hal baru tentangnya. dan aku masih takut pada emacs. : D
Tim Kennedy
1
Dalam vim, Anda juga dapat melakukan :set eol?untuk melihat apakah eol hidup atau mati, sehingga Anda tidak perlu melihat semua output :set all.
Kevin
Cara yang kurang membingungkan untuk mengatakan "file adalah panjang nol, atau memiliki baris baru" adalah "semua baris diakhiri dengan baris baru, dan file teks adalah urutan dari nol atau lebih baris".
R .. GitHub BERHENTI MEMBANTU ICE