VIMで新しいファイルを書き込むときに権限ビットを維持する


8

Vimで、を使用して現在のバッファーのコピーを新しいファイルに書き込むと、Vimは新しいファイルに:w [filename]デフォルトの(つまり、umaskなどで設定された)ファイル権限を使用しているようです。しかし、現在のバッファが既存のファイルからロードされた場合、「正しい」動作はそのファイルからのアクセス権を複製することではないでしょうか?たとえば、実行可能ファイルを編集していて、ファイルの新しいコピーを作成する場合、Vimが新しい実行可能ファイルを作成しないのはなぜですか?! chmod --reference % [newfilename]新しいファイルを書き込んだ後のようにするだけでなく、Vimに私の記述したとおりの動作をさせる方法はありますか?



答えはすでに問題になっているchmodと思います。それを行うマクロまたはキーバインドを作成する必要があります。私の知る限りは、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に追加してください。


この回答は素晴らしいですが、1つ提案があります。etcをecho system(etcに変更してくださいsilent echo system(。これにより、「Enterキーを押して続行する」ハングが回避されます。
カイルストランド

@KyleStrand:call system(...ディスプレイに何も表示しないようにすることもできましたが、コマンドが静かに失敗するという問題を回避しようとしていました。それが失敗することはないと思っている場合、または厄介なものPress ENTER...ではなく、時折発生する失敗に対応したい場合は、私はあなたの提案に同意します。ただし、より良い解決策は、system()の出力をキャプチャーし、空でない場合にのみエコーする関数を作成することです。私はプラグインでそれをしました、そしてそれはかなりうまくいきます。
garyjohn 2013年

けっこうだ。私はvimscriptをまったくよく理解していないので、それが機能するかどうかを確認するために「サイレント」で立ち往生し、問題がないように見えたときに、.vimrcをそのままにしました。たまには、永続的なものよりも時々失敗するほうがいいPress ENTER,ので、に固執するsilentか、使用するかと思いますcall。提案をありがとう!
カイルストランド

0

ファイルに未保存の変更がないことを確認してから、を使用cpしてコピーを作成します。これにより、元と同じ権限を持つコピーが作成されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.