Vimを使用して読み取り専用ファイルを編集する場合、最初の編集時に警告が表示されるだけで、変更を加えることができます。この振る舞いは、ファイルを別の名前で保存しようとしている人にとって有用であると理解できます。しかし、書き込みアクセス権のないファイルを開いてから、忘れて変更を加えることがあります。
Vimがファイルの閲覧を許可するが、変更を加えるオプションをブロックするモードに入ることは可能ですか?
Vimを使用して読み取り専用ファイルを編集する場合、最初の編集時に警告が表示されるだけで、変更を加えることができます。この振る舞いは、ファイルを別の名前で保存しようとしている人にとって有用であると理解できます。しかし、書き込みアクセス権のないファイルを開いてから、忘れて変更を加えることがあります。
Vimがファイルの閲覧を許可するが、変更を加えるオプションをブロックするモードに入ることは可能ですか?
回答:
私は解決策を見つけました。設定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
autocmd BufRead * let &modifiable = !&readonly
readonly
ファイルを開いて新しいバッファを作成した後、新しいバッファが終了しnomodifiable
ます。
上記の答えが正しい限り、考慮すべきもう1つの点があります。ファイルが「読み取り専用」である限り、ファイルの所有者でない限り、ファイルの内容を変更する方法はないはずです。そのファイルを書き込み可能にする権利があります。その場合でも、「:w!」によって「読み取り専用」状態を明示的にオーバーライドしない限り、vimはファイルに変更を書き込みません。
読み取り専用であるはずのファイルを実際に編集できる場合は、権限を再確認したい場合があります。セキュリティの構成が間違っている可能性があります。vimがファイルを編集できないようにした場合、他の編集方法が引き続き有効になるため、ファイルを変更しない場合は、適切に設定された権限が必要です。Windowsでは、すべてのユーザーに対して変更を明示的に拒否することにより、ファイルを強制的に読み取り専用にすることができます。Linuxでは、「不変」拡張属性(chattr + i)を使用できます。
let &modifiable = !&readonly