วิธีการตั้งค่าบิตเรียกใช้งานสำหรับไฟล์เฉพาะโดยอัตโนมัติ


10

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

คำตอบ:


11

สำหรับเสียงเรียกเข้าคุณมีสคริปต์ที่มีประสิทธิภาพ ตัวอย่างเช่นใน. vimrc ของฉันฉันมี:

" Stolen from http://www.debian-administration.org/articles/571
" Sets +x on stuff starting with the magic shebang.
au BufWritePost * if getline(1) =~ "^#!" | silent !chmod a+x <afile>

หากคุณต้องการทำด้วยชื่อไฟล์เท่านั้นแทนที่จะมองหา #! เส้นคุณสามารถทำ:

au BufWritePost *.ext silent !chmod a+x <afile>     " untested

ที่บทความใน Debian บริหารมีคำแนะนำสำหรับการ EMACS เช่นกัน


ชุดการตั้งค่าของคุณอัตโนมัติเป็นอย่างไร
dustin

@dustin autoread มีการตั้งค่า (จริง / เปิด / ใช่) ใน vimrc ของฉัน (AFAIK เพียงบูลีนมันเป็นเปิดหรือปิด)
Derobert

1

เท่าที่ฉันชอบคำตอบของ Derobertมันทำให้ VIM ให้คำเตือนต่อไปนี้กับฉัน:

W16: คำเตือน: โหมดของไฟล์ "test.sh" มีการเปลี่ยนแปลงตั้งแต่เริ่มการแก้ไข

รหัส (ค่อนข้างยาว) ต่อไปนี้จะแก้ปัญหานั้น (ต้องใช้ VIM ที่เปิดใช้งาน Python):

function! SetExecutableBit()
python <<EOD
import vim
import os
import stat
filename = vim.current.buffer.name
mode = os.stat(filename).st_mode
os.chmod(filename, mode | stat.S_IXUSR)
EOD
endfunction

autocmd BufWritePost *
    \ if getline(1) =~ "^#!" | call SetExecutableBit()

อ่าฉันอาจจะไม่ได้รับคำเตือนนั้นอย่างที่ฉันautoreadตั้งไว้
Derobert

ฉันสับสนว่าเงียบเตือนเพราะมันดูเหมือนว่าจะทำในสิ่งที่เพียงแค่เดียวกันแน่นอนเรียกสคริปต์หลามแทน chmod ...
derobert

ได้. แต่ด้วยเหตุผลบางอย่างฟังก์ชั่น Python จึงไม่เรียกใช้การตรวจจับการเปลี่ยนโหมด อาจเป็นเรื่องแปลกสำหรับการตั้งค่าของฉัน แต่ฉันเชื่อว่าฉันใช้ Vanilla Vim แทนในการติดตั้ง Ubuntu
SørenLøvborg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.