From 260276a5461fd7d3c4cc704fc4993c0aae8414a5 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Mon, 16 Jul 2018 01:08:20 +1200 Subject: Add shebang_create_exec.vim plugin --- vim/plugin/shebang_create_exec.vim | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 vim/plugin/shebang_create_exec.vim (limited to 'vim') diff --git a/vim/plugin/shebang_create_exec.vim b/vim/plugin/shebang_create_exec.vim new file mode 100644 index 00000000..7fabd8f7 --- /dev/null +++ b/vim/plugin/shebang_create_exec.vim @@ -0,0 +1,35 @@ +" +" shebang_create_exec.vim: Make a file executable on first save if it starts with a +" shebang. +" +" Author: Tom Ryder +" License: Same as Vim itself +" +if exists('g:loaded_shebang_create_exec') || &compatible + finish +endif +if !has('autocmd') || !has('unix') || !exists('*shellescape') + finish +endif +let g:loaded_shebang_create_exec = 1 + +" Set up hook for before writes to check the buffer for new shebangs +augroup shebang_create_exec + autocmd! + autocmd BufWritePre * call s:Check(expand(':p')) +augroup END + +" If the buffer starts with a shebang and the file being saved to doesn't +" exist yet, set up a hook to make it executable after the write is done +function! s:Check(filename) abort + if stridx(getline(1), '#!') == 0 && !filereadable(a:filename) + autocmd shebang_create_exec BufWritePost + \ call s:Chmod(expand(':p')) + endif +endfunction + +" Make the file executable and clear away the hook that called us +function! s:Chmod(filename) abort + autocmd! shebang_create_exec BufWritePost + call system('chmod +x '.shellescape(a:filename)) +endfunction -- cgit v1.2.3