Блокування змін лише для файлу для читання


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
Мартін Турнойж

@Carpetsmoker Набагато краще, як один лайнер, дякую! Однак це все одно повинно бути: autocmd BufRead * let &modifiable = !&readonly
ZeroKelvinKeyboard

Після цього після відкриття readonlyфайлу та створення нового буфера новий буфер закінчується nomodifiable.
Праксеоліт

Дякую, що вказали на це, я не помітив. Я не впевнений, як перевірити наявність нового буфера.
ZeroKelvinKeyboard

1
@Praxeolitic: Я щойно опублікував відповідь, яка повинна вирішити це питання, дайте мені знати, чи працює він.
s4y

7

Додайте це до свого .vimrc:

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

Це ґрунтується на відповіді @ ZeroKelvinKeyboard, щоб впливати лише на поточний буфер.
s4y

0

Наскільки правильні відповіді вище, слід врахувати ще одну річ: поки файл "лише для читання", не повинно змінюватися вміст файлу, якщо ви не є власником файлу або мають право зробити цей файл доступним для запису. І навіть тоді vim не записує змін у файл, якщо ви явно не заміните стан "лише для читання" на ": w!".

Якщо ви насправді можете редагувати файл, який повинен бути доступним лише для читання, можливо, ви захочете повторно перевірити права, може виникнути помилки безпеки. Якщо ви лише не зможете редагувати файл vim, інші способи редагування все ще будуть застосовані, тому якщо файл не потрібно змінювати, він повинен мати належним чином встановлені права. У Windows ви можете змусити файл читати лише чітко, забороняючи право змінити всім, в Linux ви можете використовувати "незмінний" розширений атрибут (chattr + i).


2
Вибачте, якщо я був не дуже зрозумілий. Це питання стосувалося не випадкової зміни файлу лише для читання; Я хотів не допустити редагування буфера файлу, до якого я не мав доступу для запису. Іноді я випадково відкриваю файли конфігурації системи як звичайний користувач, а не користувач root. У цьому випадку у мене немає доступу до файлу, тому буфер видається лише для читання, але Vim все одно дозволить мені редагувати буфер. Коли я намагаюся зберегти, я не можу, оскільки у мене немає доступу до запису. Я хотів, щоб Vim блокував зміни в буфері в цьому випадку.
ZeroKelvinKeyboard

А, бачу. У мене з’явилася думка, що ви хотіли цього як невдалого. Тоді не
ігноруй

ОП означає, що коли хтось відкриває файл, не доступний лише для читання в ОС, але в даний час він / вона не хоче (або вважає за потрібне) вносити зміни, і хоче обмежити себе не. Я думаю саме те саме, тим самим іду сюди від Google!
Віолаптерин
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.