Kabuk betiğini yeniden girintile


11

Boşluk ve sekmeler karışımı kullanan büyük bir kabuk komut dosyası var. Eclipse'nin Formatı gibi sözdizimine dayalı olarak tüm dosyayı yeniden girinti yapmak istiyorum. Bunu yapacak bir program var mı (güzelleştirmek mi?)?

Birlikte sıkışan her şeyle mantığı anlamakta zorlanıyorum

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

Vim'deki işlevleri nasıl arayacağınızı öğrendim ama bu işe yaramadı.

Emacs - tüm yeni satırları kaybetti

Yanıtlar:


13

Emacs bunu yapabilir:

  • dosyayı Emacs'a yükle
  • dosyanın üstündeki Ctrl- tuşuna basınspace
  • imleci dosyanın altına taşı
  • Basın Alt- Xve tip untabifyardındanreturn
  • Basın Alt- Xve tip indent-regionardındanreturn

Bu sekmelerden kurtulur ve her şeyi doğru girintiye alır.

Bunu daha sık yapmanız gerekiyorsa ve Emacs'ı düzenleyiciniz olarak kullanmıyorsanız, hepsini bir komut dosyasına paketlemek isteyebilirsiniz:

#!/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 ;;

1
Gerçekten bir emacs adamı değil - ama süper kabuk vim işe yaramazsa. Bunu deneyeceğim.
jsymolon

1
M->için olağan bağlayıcıdır end-of-buffer. Çünkü ellerinizi klavyeden çıkarmak kötüdür.
dmckee --- eski moderatör kedi yavrusu

3
Ayrıca, tüm tampon işaretleme ile yapılabilir C-x h, hangi çalışır mark-whole-buffer.
Victor

Parlak! İki şey: (i) untabifyher şeyin seçimi kaldırıldıktan sonra bölgeyi yeniden seçmem gerekiyor ve (2) bu sadece menüde değil mi? Olmayı hak ediyor!
alle_meije

5

Vi / Vim'de doğru dosya sözdizimini ( :set syntax=sh) ayarladıktan sonra , tüm dosyanın girintisini düzeltmek için : gg=G(veya 1G=G) tuşuna basabilirsiniz .

Tüm dosyayı yerinde biçimlendirme komutu şöyledir:

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

Not: Yukarıdaki komutu çalıştırmadan önce bir yedekleme yapın.

Vim ilk biçimlendirme, düzenleme dosyasını test etmek ve çalıştırmak için: :norm gg=G.

Ayrıca bkz: Vi SE'de kötü girintili kodu yeniden girintileme


2
Ben sadece denedim (Vim 8.0) ve düzgün çalışmadı. Benim tahminim, kabuk kodunu sanki C kodu gibi girintilemeye çalıştı; doğru değil küme parantezi ele ifve fianahtar kelimeler. Belki bir eklenti gerekli?
Keith Thompson

Aslında, filetype=sh(veya ft) ayarını yapmalısınız .
lingfish

Bu hiç işe yaramıyor. Karmaşık Bash senaryomu karıştırıyor.
Roel Van de Paar

2

Görünüşe göre shfmt sizin için hile yapabilir. Girintiyi içeren kabuk / bash kodunu biçimlendirir.

shfmt -l -w script.sh

1
Bu soruya cevap verebilirken, neden böyle yaptığını açıklamak daha iyi bir yanıt olacaktır . Belki de nasıl kullanılacağına dair bir örnek verebilir misiniz?
DavidPostill

HARİKA! Bu işe yaradı! Ident olarak iki boşluk kullandım, bu yüzden shfmt -i 2 -ci ~/mariadb-qa/pquery-run.sh
komutum

0

Muhtemelen Süper Kabuk Girintisi istersiniz . ~ / .Vim / indent içine kaydedin ve vim'de bir sonraki işinizde:source ~/.vim/indent/sh.vim

Ayrıca muhtemelen .vimrc dosyanızdaki dosya tabanlı akıllı girinti ayarlamak istiyorsunuz

" Turn on smart indenting
filetype indent on
set smartindent

Vim formatlama ile uğraşmak sakıncası yoksa, bu satırı vimrc'ye de ekleyin.

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

Her neyse, işte beklediğiniz buydu. Vim'de bir kabuk betiğini bir sonraki düzenlerken, akıllı girintiyi açtığınızı ve süper kabuk kimliğini kurduğunuzu varsayarsak, betiğinizi yeniden yönlendirmek için aşağıdaki tuşlara basmanız yeterlidir:gg=G

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.