รักษาบิตสิทธิ์เมื่อเขียนไฟล์ใหม่ด้วย VIM


8

ใน Vim เมื่อฉันเขียนสำเนาของบัฟเฟอร์ปัจจุบันไปยังไฟล์ใหม่โดยใช้:w [filename]ปรากฏว่า Vim ใช้ค่าเริ่มต้น (เช่นกำหนดโดย umask หรืออะไรก็ตาม) การอนุญาตไฟล์สำหรับไฟล์ใหม่ หากบัฟเฟอร์ปัจจุบันถูกโหลดจากไฟล์ที่มีอยู่แล้วพฤติกรรมที่ "ถูกต้อง" นั้นไม่ควรทำซ้ำการอนุญาตจากไฟล์นั้นหรือไม่? ตัวอย่างเช่นถ้าฉันแก้ไขแฟ้มที่ปฏิบัติการและผมเขียนสำเนาใหม่ของไฟล์ที่ว่าทำไมไม่ได้เป็นกลุ่มเขียนใหม่ปฏิบัติการ ? มีวิธีใดบ้างที่จะบังคับให้ Vim ทำงานตามที่ฉันอธิบายนอกเหนือไป! chmod --reference % [newfilename]จากการเขียนไฟล์ใหม่?


อาจเกี่ยวข้อง: unix.stackexchange.com/q/58880/22703
allquixotic

ฉันคิดว่าคำตอบนั้นมีอยู่แล้วในคำถาม - คุณควรสร้างมาโครหรือการผูกกุญแจที่ทำchmodเพื่อคุณ AFAIK, vim ไม่มีสิ่งนี้มาในตัว
Kevin Panko

คำตอบ:


3

คุณสามารถทำอะไรเช่นนี้ ก่อนอื่นให้จับชื่อไฟล์ต้นฉบับ

au BufRead * let b:oldfile = expand("<afile>")

จากนั้นเมื่อคุณบันทึกไฟล์ใหม่ให้เปลี่ยนการอนุญาตให้เป็นเช่นเดียวกับไฟล์ต้นฉบับ

au BufWritePost * if exists("b:oldfile") | let b:newfile = expand("<afile>") | if b:newfile != b:oldfile | echo system("chmod --reference=".b:oldfile." ".b:newfile) | endif |endif

เพียงใส่คำสั่งอัตโนมัติทั้งสองอันลงใน ~ / .vimrc ของคุณ


คำตอบนี้ยอดเยี่ยม แต่ฉันมีหนึ่งข้อเสนอแนะ: เปลี่ยนecho system(ฯลฯ เป็นsilent echo system(ฯลฯ หลีกเลี่ยงการ "กด ENTER เพื่อดำเนินการต่อ" ค้าง
Kyle Strand

@ KyleStrand: ฉันสามารถใช้call system(...เพื่อหลีกเลี่ยงการพิมพ์อะไรไปยังจอแสดงผลด้วย แต่ฉันพยายามหลีกเลี่ยงปัญหาของคำสั่งล้มเหลวอย่างเงียบ ๆ หากคุณไม่คิดว่ามันจะล้มเหลวหรืออยากอยู่กับความล้มเหลวเป็นครั้งคราวแทนที่จะเป็นเรื่องน่ารำคาญPress ENTER...ฉันก็เห็นด้วยกับคำแนะนำของคุณ ฉันคิดว่าทางออกที่ดีกว่าคือการเขียนฟังก์ชั่นที่จับเอาท์พุทของระบบ () และสะท้อนมันเฉพาะเมื่อมันไม่ว่างเปล่า ฉันทำอย่างนั้นในปลั๊กอินและมันทำงานได้ดี
garyjohn

ยุติธรรมพอสมควร ฉันไม่เข้าใจ vimscript ได้ดีเลยดังนั้นฉันจึงติดอยู่ใน "เงียบ" เพื่อดูว่ามันจะทำงานได้หรือไม่และเมื่อมันดูโอเคฉันก็ออกจาก. vimrc แบบนั้น แน่นอนผมต้องการความล้มเหลวเป็นครั้งคราวเพื่อถาวรPress ENTER,แม้ว่าดังนั้นฉันคิดว่าฉันอาจจะติดกับหรือการใช้งานsilent callขอบคุณอีกครั้งสำหรับคำแนะนำ!
Kyle Strand

0

ตรวจสอบให้แน่ใจว่าไม่มีการเปลี่ยนแปลงที่ไม่ได้บันทึกในไฟล์จากนั้นใช้cpในการทำสำเนา ซึ่งจะส่งผลให้สำเนาที่มีสิทธิ์เหมือนกับต้นฉบับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.