如何自动设置特定文件的可执行位


10

我希望当我创建一个特定文件时,假设我是在vim编辑器中创建的,创建的文件在创建时也应获得可执行权限。我想要这个,因为我正在创建一些python文件,并且不想显式设置该文件的权限,因此我想要某种方式,以便在我创建具有特定扩展名或特定编辑器的文件时立即设置可执行位。

Answers:


11

对于vim,您可以使用功能强大的脚本。例如,在我的.vimrc文件中,我有:

" Stolen from http://www.debian-administration.org/articles/571
" Sets +x on stuff starting with the magic shebang.
au BufWritePost * if getline(1) =~ "^#!" | silent !chmod a+x <afile>

如果您只想按文件名执行操作,而不要查找#!行,您可以这样做:

au BufWritePost *.ext silent !chmod a+x <afile>     " untested

在Debian管理的文章有Emacs的说明,以及。


您的自动阅读设置为什么?
Dustin

@dustin autoread在我的vimrc中设置为(true / on / yes)(AFAIK,它只是一个布尔值,它是on还是off)
derobert

1

就我喜欢derobert的回答而言,它使VIM发出以下警告:

W16:警告:自开始编辑以来,文件“ test.sh”的模式已更改

以下代码(稍长一些)解决了该问题(需要启用Python的vim):

function! SetExecutableBit()
python <<EOD
import vim
import os
import stat
filename = vim.current.buffer.name
mode = os.stat(filename).st_mode
os.chmod(filename, mode | stat.S_IXUSR)
EOD
endfunction

autocmd BufWritePost *
    \ if getline(1) =~ "^#!" | call SetExecutableBit()

嗯,我可能没有像我autoread设定的那样收到警告。
derobert

我很困惑,它使警告无能为力,因为它似乎确实在做同样的事情-只是调用python脚本而不是chmod ...
derobert 2013年

对。但是由于某些原因,Python函数不会触发模式更改检测。尽管我相信我在Ubuntu安装上运行的是原始的Vim,但可能会有点奇怪。
索伦Løvborg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.