Memblokir perubahan untuk hanya membaca file

14

Saat menggunakan Vim untuk mengedit file hanya baca, itu hanya akan memberikan peringatan saat pertama kali diedit tetapi memungkinkan perubahan apa pun terjadi. Saya dapat memahami perilaku ini dapat bermanfaat bagi seseorang yang bermaksud menyimpan file dengan nama lain; tapi kadang-kadang saya membuka file yang saya tidak punya akses untuk menulis, lalu lupa dan buat perubahan.

Apakah mungkin untuk memasuki mode di mana Vim akan memungkinkan file untuk dilihat tetapi memblokir opsi apa pun yang membuat perubahan?

ZeroKelvinKeyboard
sumber

Jawaban:

13

Saya menemukan solusinya. Pengaturan nomodifiablemencegah file diedit (seperti yang digunakan dalam windows bantuan). Saya membuat fungsi sederhana untuk mengatur atau menghapus modifiabletergantung pada apakah readonlydiatur dan dilampirkan ke autocmd.

" Don't allow editing of read only files
autocmd BufRead * call RONoEdit()

function! RONoEdit()
  if &readonly == 1
    set nomodifiable
  else
    set modifiable
  endif
endfunction
ZeroKelvinKeyboard
sumber
4
Anda dapat membuatnya lebih singkat dengan melakukan:let &modifiable = !&readonly
Martin Tournoij
@Carpetsmoker Jauh lebih baik sebagai satu liner, terima kasih! Namun itu masih harus: autocmd BufRead * let &modifiable = !&readonly
ZeroKelvinKeyboard
Dengan ini, setelah membuka readonlyfile dan kemudian membuat buffer baru, buffer baru berakhir nomodifiable.
Praxeolitic
Terima kasih telah menunjukkan itu, saya tidak menyadarinya. Saya tidak yakin bagaimana cara menguji buffer baru.
ZeroKelvinKeyboard
1
@Praxeolitic: Saya baru saja memposting jawaban yang harus mengatasi ini, beri tahu saya jika berhasil.
s4y
7

Tambahkan ini ke .vimrc Anda:

autocmd BufRead * let &l:modifiable = !&readonly
s4y
sumber
Ini didasarkan pada jawaban @ ZeroKelvinKeyboard untuk hanya memengaruhi buffer saat ini.
s4y
0

Sebanyak jawaban di atas benar, ada hal lain yang harus diperhitungkan: selama file tersebut "hanya-baca", seharusnya tidak ada cara untuk mengubah konten file kecuali Anda adalah pemilik file atau memiliki hak untuk membuat file itu dapat ditulisi. Dan bahkan vim tidak menulis perubahan pada file kecuali Anda secara eksplisit menimpa "read-only" state by ": w!".

Jika Anda sebenarnya dapat mengedit file yang seharusnya hanya-baca, Anda mungkin ingin memeriksa kembali haknya, mungkin ada kesalahan konfigurasi keamanan. Jika Anda hanya membuat vim tidak dapat mengedit file, cara-cara lain untuk mengedit masih akan ada sehingga jika file tidak akan diubah, itu harus memiliki hak yang ditetapkan dengan benar. Di windows, Anda dapat memaksa file untuk hanya-baca dengan secara eksplisit menolak perubahan untuk semua orang, di Linux Anda dapat menggunakan atribut extended "immutable" (chattr + i).

mikky
sumber
2
Maaf jika saya tidak begitu jelas. Pertanyaan ini bukan tentang mengubah file read only secara tidak sengaja; Saya ingin menghentikan diri agar tidak dapat mengedit buffer file yang tidak dapat saya akses tulis. Terkadang saya secara tidak sengaja membuka file konfigurasi sistem sebagai pengguna biasa daripada pengguna root. Dalam hal ini saya tidak memiliki akses tulis ke file, sehingga buffer muncul sebagai hanya baca tetapi Vim masih akan memungkinkan saya untuk mengedit buffer. Ketika saya mencoba menyelamatkan saya tidak bisa karena saya tidak memiliki akses tulis. Saya ingin Vim memblokir perubahan pada buffer dalam kasus ini.
ZeroKelvinKeyboard
Ah, begitu. Saya mendapat ide bahwa Anda ingin ini gagal. Abaikan jawaban saya :)
mikky
OP berarti bahwa ketika seseorang membuka file tidak-baca-saja di OS, tetapi dia saat ini tidak ingin (atau menganggap perlu untuk) melakukan perubahan, dan ingin membatasi dirinya untuk tidak. Saya berpikir persis sama, jadi pergi ke sini dari Google!
Violapterin