9

У меня есть большой сценарий оболочки, который использует смесь пробелов и табуляции. Я хочу переопределить весь файл на основе синтаксиса, такого как формат Eclipse. Есть ли программа (украсить?) что будет делать это?

Мне трудно разобраться в логике, когда все собрано вместе, например

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

Узнал, как вызывать функции в Vim, но это не сработало.

Emacs - потерял все новые строки

4 ответа4

12

Emacs может сделать это:

  • загрузить файл в Emacs
  • нажмите Ctrl - пробел в верхней части файла
  • переместить курсор в конец файла
  • нажмите Alt - X и введите untabify затем вернитесь
  • нажмите Alt - X и введите indent-region затем вернитесь

Это избавит от вкладок и сделает все правильно.

Если вам нужно делать это чаще и не использовать 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 ;;
4

В 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.

0

Похоже, что shfmt может помочь вам. Он форматирует код оболочки /bash, который включает отступы.

shfmt -l -w script.sh
0

Вы, вероятно, хотите, чтобы отступ Super Shell. Сохраните его в ~/.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, предполагая, что вы включили интеллектуальный отступ и установили супероболочку идентификатора, просто нажмите следующие клавиши, чтобы заново сделать скрипт: gg=G

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .