Answers:
我不记得是在哪里找到的,但是我在〜/ .vimrc中使用了以下内容
" Set scripts to be executable from the shell
au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent !chmod +x <afile> | endif | endif
如果第一行以“#!”开头,该命令将自动设置可执行位。或包含“ / bin /”。
au BufWritePost * if getline(1) =~ "^#!" | silent !chmod +x % | endif
/bin
不立即跟随shebang的地方捕获行,例如#!/usr/bin/env
。解决该问题的方法当然是使用通配符:getline(1) =~ "^#!.*/bin/"
。
written/bin/bash: endif: command not found /bin/bash: endif: command not found
au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent execute "!chmod a+x <afile>" | endif | endif
我在http://vim.wikia.com上找到了该脚本。我认为这不是一个完美的解决方案,而是可以接受的解决方案。
function! SetExecutableBit()
let fname = expand("%:p")
checktime
execute "au FileChangedShell " . fname . " :echo"
silent !chmod a+x %
checktime
execute "au! FileChangedShell " . fname
endfunction
command! Xbit call SetExecutableBit()
您现在可以使用命令设置execute位:Xbit
。全部归功于vim.wikia.com上的Max Ischenko
我在MacVim自定义版本8.0.648中使用了此功能(134)
" if file is executable just exit
au BufWritePost *.sh if FileExecutable("%") | if getline(1) =~ "^#!" | silent !chmod u+x % | endif | endif
" Determines if file is already executable
function! FileExecutable(fname)
execute "silent! ! test -x" a:fname
return v:shell_error
endfunction
tonymac的答案在某些时候(对于VIM 7.4)停止了对我的工作,给了我与@StevieD相同的问题。修改它可以解决问题:
au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent execute "!chmod +x <afile>" | endif | endif
我从https://bbs.archlinux.org/viewtopic.php?id=126304找到了答案,尽管@StevieD也给出了相同的答案。
if
的为一体if getline(1) =~ "^#!/bin/"
。无论如何,这太神奇了。谢谢。