การบล็อกการเปลี่ยนแปลงเพื่ออ่านไฟล์อย่างเดียว


14

เมื่อใช้ Vim เพื่อแก้ไขไฟล์แบบอ่านอย่างเดียวจะมีการแจ้งเตือนในครั้งแรกที่มีการแก้ไข แต่อนุญาตให้ทำการเปลี่ยนแปลงใด ๆ ฉันเข้าใจว่าพฤติกรรมนี้อาจมีประโยชน์สำหรับคนที่ตั้งใจจะบันทึกไฟล์ภายใต้ชื่ออื่น แต่บางครั้งฉันเปิดไฟล์ที่ฉันไม่มีสิทธิ์เข้าถึงเพื่อเขียนจากนั้นลืมและทำการเปลี่ยนแปลง

เป็นไปได้หรือไม่ที่จะเข้าสู่โหมดที่ Vim จะอนุญาตให้ดูไฟล์ได้ แต่ปิดกั้นตัวเลือกที่เปลี่ยนแปลง

คำตอบ:


13

ฉันพบวิธีแก้ปัญหา การตั้งค่าnomodifiableป้องกันไฟล์ที่ถูกแก้ไข (ตามที่ใช้ในหน้าต่างวิธีใช้) ฉันสร้างฟังก์ชั่นง่าย ๆ เพื่อตั้งค่าหรือยกเลิกการตั้งค่าmodifiableขึ้นอยู่กับว่าreadonlyมีการตั้งค่าและแนบกับ 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

4
คุณสามารถทำให้มันสั้นลงโดยทำ:let &modifiable = !&readonly
Martin Tournoij

@Carpetsmoker ดีขึ้นมากในฐานะหนึ่งซับขอบคุณ! อย่างไรก็ตามมันจะยังคงต้องเป็น: autocmd BufRead * let &modifiable = !&readonly
ZeroKelvinKeyboard

ด้วยวิธีนี้หลังจากที่เปิดไฟล์แล้วสร้างบัฟเฟอร์ใหม่กันชนใหม่จบลงreadonly nomodifiable
Praxeolitic

ขอบคุณที่ชี้ให้เห็นว่าฉันไม่ได้สังเกต ฉันไม่แน่ใจว่าจะทดสอบบัฟเฟอร์ใหม่ได้อย่างไร
ZeroKelvinKeyboard

1
@ Praxeolitic: ฉันเพิ่งโพสต์คำตอบที่ควรจะอยู่นี้แจ้งให้เราทราบว่ามันใช้งานได้
s4y

7

เพิ่มลงใน. vimrc ของคุณ:

autocmd BufRead * let &l:modifiable = !&readonly

สิ่งนี้สร้างขึ้นจากคำตอบของ @ ZeroKelvinKeyboard เพื่อส่งผลกระทบต่อบัฟเฟอร์ปัจจุบันเท่านั้น
s4y

0

ตราบเท่าที่คำตอบข้างต้นนั้นถูกต้องมีสิ่งอื่นที่ควรคำนึงถึง: ตราบใดที่ไฟล์เป็น "อ่านอย่างเดียว" คุณไม่ควรเปลี่ยนเนื้อหาของไฟล์จนกว่าคุณจะเป็นเจ้าของไฟล์หรือ มีสิทธิ์ที่จะทำให้ไฟล์นั้นเขียนได้ และแม้แต่เสียงเรียกนั้นก็ไม่ได้เขียนการเปลี่ยนแปลงของไฟล์เว้นแต่คุณจะแทนที่ "อ่านอย่างเดียว" โดย ": w!"

หากคุณสามารถแก้ไขไฟล์ที่อ่านได้อย่างเดียวคุณอาจต้องการตรวจสอบสิทธิ์อีกครั้งอาจมีการกำหนดค่าความปลอดภัยผิดพลาด หากคุณทำให้ vim ไม่สามารถแก้ไขไฟล์ได้วิธีการแก้ไขอื่น ๆ จะยังคงอยู่ดังนั้นหากไฟล์นั้นไม่สามารถเปลี่ยนแปลงได้ควรมีการตั้งค่าสิทธิ์อย่างเหมาะสม ใน windows คุณสามารถบังคับให้ไฟล์เป็นแบบอ่านอย่างเดียวโดยปฏิเสธการเปลี่ยนแปลงที่ถูกต้องกับทุกคนอย่างชัดเจนใน Linux คุณสามารถใช้แอ็ตทริบิวต์ส่วนขยาย "ไม่เปลี่ยนรูป" (chattr + i)


2
ขออภัยถ้าฉันไม่ชัดเจนมาก คำถามนี้ไม่เกี่ยวกับการเปลี่ยนไฟล์อ่านอย่างเดียวโดยไม่ตั้งใจ ฉันต้องการหยุดตัวเองจากความสามารถในการแก้ไขบัฟเฟอร์ของไฟล์ที่ฉันไม่ได้มีการเข้าถึงการเขียน บางครั้งฉันบังเอิญเปิดไฟล์การกำหนดค่าระบบในฐานะผู้ใช้ทั่วไปแทนที่จะเป็นผู้ใช้รูท ในกรณีนี้ฉันไม่มีสิทธิ์ในการเขียนไฟล์ดังนั้นบัฟเฟอร์จะปรากฏเป็นแบบอ่านอย่างเดียว แต่กลุ่มจะยังคงให้ฉันแก้ไขบัฟเฟอร์ เมื่อฉันพยายามบันทึกฉันไม่สามารถทำได้เพราะฉันไม่มีสิทธิ์เข้าถึงเพื่อเขียน ฉันต้องการให้ Vim บล็อกการเปลี่ยนแปลงบัฟเฟอร์ในกรณีนี้
ZeroKelvinKeyboard

อ่าฉันเข้าใจแล้ว ฉันมีความคิดว่าคุณต้องการให้สิ่งนี้เป็นสิ่งที่ไม่ปลอดภัย ไม่ต้องสนใจคำตอบของฉัน :)
mikky

OP หมายถึงเมื่อเปิดไฟล์ที่ไม่ได้เป็นแบบอ่านอย่างเดียวใน OS แต่ปัจจุบันเขา / เธอไม่ต้องการที่จะ (หรือพิจารณาว่าเหมาะสม) เปลี่ยนแปลงและต้องการ จำกัด ตัวเองไม่ให้ทำ ฉันกำลังคิดเหมือนกันดังนั้นจึงมาจาก Google!
Violapterin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.