Duy trì các bit quyền khi ghi tệp mới bằng VIM


8

Trong Vim, khi tôi viết một bản sao của bộ đệm hiện tại vào một tệp mới bằng cách sử dụng :w [filename], có vẻ như Vim sử dụng quyền truy cập tệp mặc định (nghĩa là được đặt bằng ô hoặc bất cứ thứ gì) cho tệp mới. Tuy nhiên, nếu bộ đệm hiện tại đã được tải từ một tệp hiện có, thì hành vi "đúng" có nên sao chép các quyền từ tệp đó không? Ví dụ: nếu tôi đang chỉnh sửa tệp thực thi và tôi viết một bản sao mới của tệp, tại sao Vim không viết tệp thực thi mới ? Có cách nào để buộc Vim hành xử theo cách tôi mô tả, ngoài việc chỉ làm một việc gì đó như ! chmod --reference % [newfilename]sau khi viết tệp mới không?



Tôi nghĩ rằng câu trả lời đã có trong câu hỏi - bạn nên tạo một macro hoặc keybinding phù hợp chmodvới bạn. AFAIK, vim không được tích hợp sẵn.
Kevin Panko

Câu trả lời:


3

Bạn có thể làm một cái gì đó như thế này. Đầu tiên, chụp tên của tệp gốc.

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

Sau đó, khi bạn lưu tệp mới, thay đổi quyền của nó giống với quyền của tệp gốc.

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

Chỉ cần đặt cả hai autocommands đó vào ~ / .vimrc của bạn.


Câu trả lời này là tuyệt vời, nhưng tôi có một đề nghị: thay đổi echo system(vv để silent echo system(, vv tránh được điều này là "nhấn ENTER để tiếp tục" treo.
Kyle Strand

@KyleStrand: Tôi cũng có thể đã từng call system(...tránh in bất cứ thứ gì lên màn hình, nhưng tôi đã cố gắng tránh vấn đề của lệnh bị lỗi một cách im lặng. Nếu bạn không nghĩ nó sẽ thất bại, hay thà sống với thất bại thường xuyên hơn là phiền muộn Press ENTER..., thì tôi đồng ý với đề nghị của bạn. Tuy nhiên, tôi nghĩ rằng một giải pháp tốt hơn sẽ là viết một hàm nắm bắt đầu ra của hệ thống () và chỉ lặp lại nếu nó không trống. Tôi đã thực hiện điều đó trong các plugin và nó hoạt động khá tốt.
garyjohn

Đủ công bằng. Tôi hoàn toàn không hiểu rõ về vimscript, vì vậy tôi chỉ tập trung vào "im lặng" để xem nó có hoạt động không, và khi nó có vẻ ổn, tôi chỉ để lại .vimrc của mình như thế. Tôi chắc chắn thích sự thất bại thường xuyên hơn cho người kiên trì Press ENTER,, vì vậy tôi nghĩ rằng tôi sẽ gắn bó silenthoặc sử dụng call. Cảm ơn một lần nữa những lời đề nghị!
Kyle Strand

0

Đảm bảo rằng không có thay đổi chưa được lưu trong tệp và sau đó sử dụng cpđể tạo bản sao. Điều đó sẽ dẫn đến một bản sao có cùng quyền với bản gốc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.