スペースとタブを組み合わせて使用する大きなシェルスクリプトがあります。 Eclipseのフォーマットなどの構文に基づいてファイル全体を再インデントしたいと思います。これを行うプログラム(美化?)はありますか?
すべてが詰まっているロジックを理解するのに苦労しています。
if [ "$CANCELLATION" ]
then
while test $num -gt 0
do
if [ "$cjb" -gt 0 ]
Vimで関数を呼び出す方法を学びましたが、うまくいきませんでした。
Emacs-すべての改行を失った
Emacsはそれを行うことができます:
untabify
と入力してから returnindent-region
と入力してから returnこれにより、タブが削除され、すべてが適切にインデントされます。
これをより頻繁に行う必要があり、エディターとしてEmacsを使用しない場合は、すべてをスクリプトにパックすることをお勧めします。
#!/usr/bin/emacs --script
(setq require-final-newline 'visit)
(defun indent-files (files)
(cond (files
(find-file (car files))
(untabify (point-min) (point-max))
(indent-region (point-min) (point-max))
(save-buffer)
(kill-buffer)
(indent-files (cdr files)))))
(indent-files command-line-args-left)
;; EOF ;;
Vi/Vimでは、正しいファイル構文(:set syntax=sh
)、押すことができます: gg=G (または 1G=G)ファイル全体のインデントを修正します。
ファイル全体をインプレースでフォーマットするコマンドは次のとおりです。
ex +"set syn=sh" +"norm gg=G" -cwq foobar.sh
注:上記のコマンドを実行する前に、バックアップを作成してください。
最初にフォーマットをテストするには、Vimでファイルを編集して、次のコマンドを実行します。:norm gg=G
。
参照: ひどくインデントされたコードの再インデント Vi SE
shfmt があなたのためにトリックをすることができるように見えます。インデントを含むシェル/ bashコードをフォーマットします。
shfmt -l -w script.sh
あなたはおそらく Super Shell Indent を望みます。それを〜/ .vim/indentに保存し、次にvimに入るときに、:source ~/.vim/indent/sh.vim
を実行します。
また、.vimrcでファイルベースのスマートインデントを設定することもできます。
" Turn on smart indenting
filetype indent on
set smartindent
Vimがフォーマットをいじることを気にしない場合は、この行をvimrcにも追加します。
" When you load/save a Shell script, auto indent it
autocmd BufRead,BufWritePre *.sh normal gg=G
とにかく、これがあなたが待ち望んでいたものです。次にvimでシェルスクリプトを編集するときに、スマートインデントをオンにし、スーパーシェルIDをインストールしたと仮定して、次のキーを押してスクリプトを再度インデントします:gg=G