web-dev-qa-db-ja.com

vim:+ xビットでファイルを作成

作成中にスクリプトに+xビットを設定する方法はありますか?

たとえば、私は実行します:

vim -some_option_to_make_file_executable script.sh

保存後、追加の移動なしでファイルを実行できます。

ps。 chmodvimから、またはコンソール自体からでも実行できますが、これは少し煩わしいため、vimはファイルをリロードするように提案します。また、毎回chmodコマンドを入力するのは面倒です。 pps。ファイル拡張子に応じて作成すると便利です(実行可能ファイル.txt :-)は必要ありません)

15
rush

これをどこで見つけたか思い出せませんが、〜/ .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 /」が含まれています。

24
tonymac

このスクリプト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のMaxIschenkoへのすべてのクレジット

4
nsg

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
0
TonyB

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も同じ回答を示しました。

0
Jonathan