+x
생성 시 스크립트에 비트를 설정하는 방법이 있나요 ?
예를 들어 다음을 실행합니다.
vim -some_option_to_make_file_executable script.sh
저장한 후에는 추가 이동 없이 파일을 실행할 수 있습니다.
참고 사항 chmod
콘솔 자체에서 또는 심지어 콘솔 자체에서도 이 작업을 실행할 수 있지만 파일을 다시 로드하는 것이 권장되므로 vim
약간 짜증납니다 . vim
그리고 chmod
매번 명령어를 입력하는 것도 귀찮습니다. pps. 파일 확장자를 기준으로 만들어주면 좋을 것 같습니다. (실행 파일은 필요하지 않습니다 .txt
:-) )
답변1
이것을 어디서 찾았는지는 기억나지 않지만 ~/.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/"을 포함합니다.
답변2
내가 찾은이 스크립트존재하다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()
이제 명령을 사용하여 실행 비트를 설정할 수 있습니다 :Xbit
. vim.wikia.com의 Max Ischenko에 대한 모든 크레딧
답변3
나는 좀 더 선별적인 버전을 직접 작성했습니다. 새 파일이 작성될 때만 파일을 실행 가능하게 만들고, 파일이 #!
.
" automatically make script files executable when writing for the first time
function! NewScriptExec() abort
" check if this is a new file which starts with a shebang
if exists('s:new_file') && getline(1)[0:1] == '#!'
" based on https://stackoverflow.com/a/57539332/370695
let l:file = expand('%')
let l:old_perm = getfperm(l:file)
" set the exec bit everywhere the read bit is set
let l:new_perm = substitute(l:old_perm, '\v(r.)-', '\1x', 'g')
if (l:old_perm != l:new_perm)
call setfperm(l:file, l:new_perm)
endif
unlet s:new_file
endif
endfunction
augroup new_script_exec
autocmd!
autocmd BufNewFile * let s:new_file = 1
autocmd BufWritePost * call NewScriptExec()
augroup END
답변4
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도 동일한 답변을 제공했지만.