Jak sformatować / reindentować wszystkie pliki źródłowe w danym katalogu?

14

Biorąc pod uwagę katalog zawierający drzewo źródłowe, czy istnieje prosty sposób z wiersza poleceń zastąpienie każdego pliku źródłowego jego pięknie przeformatowanym odpowiednikiem?

Należy pamiętać, że zwykle drzewo źródłowe projektu zawiera również pliki, które nie są źródłowe, a same źródła mogą być w różnych językach.

Szukam narzędzia, które obsługuje jak najwięcej języków, ponieważ projekt zwykle zawiera źródła w wielu różnych językach. W szczególności szukałbym czegoś obsługującego xml / html, javascript, ruby ​​i java.

fdierre
źródło
1
A językiem jest ...?
użytkownik nieznany
2
Podobne pytania i odpowiedzi na stackoverflow: stackoverflow.com/questions/1731357/…
lędźwiowy

Odpowiedzi:

7

Możesz użyć vima w trybie ex i poleceń, z terminala.

Aby wciąć pojedynczy plik:

vim -c "normal gg=G" -e <file-to-indent> <<'EOF'
:wq
EOF

Aby rekurencyjnie wciąć pliki, utwórz następujący skrypt:

indent-with-vim.sh

vim -c "normal gg=G" -e $1 <<'EOF'
:wq
EOF

Teraz wpisz:

$ chmod u+x indent-with-vim.sh
$ find . | xargs -I {} ./indent-with-vim.sh {}

Vim dołoży wszelkich starań, aby ponownie zindeksować pliki. Możesz poprawić niektóre określone typy plików.

W przypadku XML:

  • Zainstaluj xmllint Dodaj do swojego.vimrc

    au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
    

Aby poprawić formatowanie PHP:

Pobierz http://www.vim.org/scripts/download_script.php?src_id=15001 (pobierze plik o nazwie php.vim)

Utwórz następujące katalogi w domu:

~/.vim/indent

I skopiuj php.vimdo~/.vim/indent

Jeśli wynik nie jest zadowalający dla dowolnego typu pliku, możesz poszukać alternatyw w Internecie (np. HTML dla HTML, https://github.com/vim-ruby/vim-ruby w celu ulepszenia Rubiego itd. ).

Tak czy inaczej, możesz użyć techniki .vimrc lub pliku wcięcia foo.vim, aby poprawić wcięcie.

Możesz także zmienić parametry wyszukiwania, aby zastosować je tylko do niektórych określonych typów, takich jak:

find . -iname "*.html" -or -iname "*.xml"
taksan
źródło
2

Zainstaluj indentpakiet, a następnie uruchom program na plikach.

psusi
źródło
1
To obsługuje tylko C, prawda? indent.isidore-it.eu/beautify.html
Cesium
Myślisz, że fdierre szuka uniwersalnego?
użytkownik nieznany
1
Tak, szukałem narzędzia, które jest jak najbardziej „uniwersalne”. Zmodyfikowałem pytanie, aby to sprecyzować.
fdierre
0

Nie za darmo, nie z wiersza poleceń, prawdopodobnie zbyt skomplikowane, ale IntelliJ Idea to IDE, które jest w stanie to zrobić. Nie testowałem tego z Javą ani Ruby, ale działa całkiem nieźle z projektem django (python + javascript + HTML).

Ma również dość szeroki wachlarz opcji do konfiguracji, co należy sformatować.

Jeśli jest to problem jednorazowy, możesz bezpłatnie pobrać wersję próbną.

To zrzut ekranu z opcjami formatu HTML. Został zaczerpnięty z PyCharm (ograniczona wersja Pythona, tutaj nie ma wsparcia dla Ruby ani Java), ponieważ używam go, ale IntelliJ powinien być taki sam, ale obsługuje znacznie więcej języków.

wprowadź opis zdjęcia tutaj

Javier Rivera
źródło
0

Format Google Java

Ponownie formatuje kod źródłowy Java, aby był zgodny ze stylem Google Java:

https://github.com/google/google-java-format

wget https://github.com/google/google-java-format/releases/download/google-java-format-1.5/google-java-format-1.5-all-deps.jar
java -jar google-java-format-1.5-all-deps.jar /path/to/MyClass.java

Wskazówki:

  • Aby to zrobić na plikach wielopunktowych, użyj --replaceopcji wraz zxargs
  • Użyj, spongeaby bezpośrednio zastąpić plik wejściowy
  • Istnieje wtyczka Eclipse i IntelliJ do wykonywania tego samego formatowania
Sridhar Sarnobat
źródło