Script de shell de reentrada

9

Eu tenho um script de shell grande que usa uma mistura de espaços e guias. Eu quero recuar o arquivo inteiro baseado na sintaxe, como o formato do Eclipse. Existe um programa (embelezar?) Que fará isso?

Estou tendo dificuldade em descobrir a lógica com tudo preso por exemplo,

   if [ "$CANCELLATION" ]
   then
   while test $num -gt 0
    do
    if [ "$cjb" -gt 0 ]

Aprendi a chamar funções no Vim, mas isso não funcionou.

Emacs - perdeu todas as novas linhas

    
por jsymolon 10.09.2009 / 16:10

4 respostas

12

O Emacs pode fazer isso:

  • carrega o arquivo no Emacs
  • pressione Ctrl - espaço na parte superior do arquivo
  • mova o cursor para a parte inferior do arquivo
  • pressione Alt - X e digite untabify , em seguida, retornar
  • pressione Alt - X e digite indent-region , em seguida, retornar

Isso eliminará as guias e recuará tudo corretamente.

Se você precisar fazer isso com mais frequência e não usar o Emacs como editor, convém incluir tudo em um script:

#!/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 ;;
    
por 10.09.2009 / 16:17
4

No Vi / Vim, uma vez que você tenha definido a sintaxe correta do arquivo ( :set syntax=sh ), você pode pressionar: gg = G (ou 1G = G ) recuo correto de todo o arquivo.

Aqui está o comando para formatar todo o arquivo no local:

ex +"set syn=sh" +"norm gg=G" -cwq foobar.sh

Nota: Faça um backup antes de executar o comando acima.

Para testar a formatação primeiro, edite o arquivo no Vim e execute: :norm gg=G .

Veja também: Recodificando o código recuado incorretamente na Vi SE

    
por 11.09.2015 / 01:01
0

Você provavelmente deseja recuo do Super Shell . Salve-o em ~ / .vim / indent e, quando for o próximo no vim, execute :source ~/.vim/indent/sh.vim

Você provavelmente também deseja configurar o recuo inteligente baseado em arquivo em seu .vimrc

" Turn on smart indenting
filetype indent on
set smartindent

Se você não se importar com o vim mexendo com a sua formatação, adicione esta linha ao vimrc também.

" When you load/save a shell script, auto indent it
autocmd BufRead,BufWritePre *.sh normal gg=G

Enfim, aqui está o que você estava esperando. Quando você estiver editando um script de shell no vim, assumindo que você ativou o recuo inteligente e instalou o super shell ident, basta pressionar as seguintes chaves para reindentá-lo: gg=G

    
por 28.05.2014 / 01:39
0

Parece que shfmt poderia fazer o truque para você. Ele formata código shell / bash, que inclui recuo.

shfmt -l -w script.sh
    
por 08.04.2018 / 15:57