Answers:
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 ;;
M->
是的常用绑定end-of-buffer
。因为从键盘上拿开手是邪恶的。
C-x h
,它运行mark-whole-buffer
。
untabify
所有内容均未选中之后,我必须重新选择区域;以及(2)这不仅用于菜单吗?值得成为!
在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中重新缩进严重缩进的代码
if
和fi
关键字。也许需要一些插件?
filetype=sh
(或ft
)。
看起来shfmt可以帮您解决问题。它格式化shell / bash代码,其中包括缩进。
shfmt -l -w script.sh
shfmt -i 2 -ci ~/mariadb-qa/pquery-run.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中编辑shell脚本时,假设您已打开智能缩进并安装了超级shell ident,只需按以下键即可重新缩进脚本:gg=G