Підтримуйте біти дозволів під час запису нового файлу за допомогою VIM


8

У Vim, коли я записую копію поточного буфера в новий файл за допомогою :w [filename], виявляється, що Vim використовує типові (тобто встановлені umask або будь-які інші) дозволи на новий файл. Якщо поточний буфер був завантажений із наявного файлу, чи не слід «правильним» поведінкою дублювати дозволи з цього файлу? Наприклад, якщо я редагую виконуваний файл і пишу нову копію файлу, чому Vim не пише новий виконуваний файл ? Чи є якийсь спосіб змусити Vim поводитись так, як я описую, крім того, щоб робити щось на кшталт ! chmod --reference % [newfilename]після написання нового файлу?


Можливо, пов’язано: unix.stackexchange.com/q/58880/22703
allquixotic

Я думаю, що відповідь вже є у питанні - ви повинні зробити макрос або прив'язку клавіш, яка робить це chmodдля вас. AFAIK, vim не має цього вбудованого.
Кевін Панько

Відповіді:


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 для продовження".
Кайл Странд

@KyleStrand: Я міг би call system(...також уникати друку нічого на дисплеї, але я намагався уникнути неполадки команди. Якщо ви не думаєте, що це колись не вдасться, або скоріше будете жити з випадковим невдачею, ніж знуче Press ENTER..., тоді я згоден з вашою пропозицією. Я думаю, що кращим рішенням було б написати функцію, яка фіксує вихід системи () і повторює її, лише якщо вона не порожня. Я це зробив у плагінах, і він працює досить добре.
garyjohn

Справедливо. Я взагалі не дуже добре розумію вимскрипт, тому я просто застряг у "мовчазності", щоб побачити, чи це спрацює, і коли це здалося нормальним, я просто покинув .vimrc так. Я, безумовно, віддаю перевагу випадковій відмові перед стійкими Press ENTER,, тому, думаю, я або буду дотримуватися, silentабо використовувати call. Ще раз дякую за пропозиції!
Кайл Странд

0

Переконайтесь, що у файлі немає збережених змін, а потім cpскопіюйте їх, щоб зробити копію. Це призведе до отримання копії з тими ж дозволами, що й оригіналу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.