Automatyczne wcięcie / kod formatu dla Vima?

Próbuję coraz częściej używać Vima, kiedy tylko mogę. Jednym z moich największych problemów między Vimem a IDE takim jak Aptana jest możliwość automatycznego wcięcia .

Czy istnieje sposób na automatyczne formatowanie kodu (HTML, CSS, PHP) tak, aby był odpowiednio wcięty?

Jeśli tak, to jak zainstalować to w vimie? bardzo dobrze rozumiem wtyczki. Próbowałem przejrzeć ten wątek i jeszcze bardziej mnie to zmyliło: Jak zmienić zachowanie automatycznego wcięcia w Vimie?

Komentarze

  • Czy możesz wyjaśnić, w jakim języku chcesz wprowadzić wcięcie? Spodziewałbym się, że jeśli ' jest już obsługiwany przez vima, powinien już mieć automatyczne wcięcie bez dalszych wysiłków. Jeśli nie, powinieneś być w stanie uzyskać wtyczkę.
  • najlepiej HTML / css i php

Odpowiedź

Aby automatycznie wciąć cały plik:

gg =G 

Wyjaśnienie:

  • gg – idź na początek pliku
  • G – idź na koniec pliku
  • = wcięcie

Komentarze

  • Czy mógłbyś to wyjaśnić? Co to jest typowo samo w sobie? and = G?
  • @Chris zobacz edycję
  • Dobra wskazówka, nigdy tego nie wiedziałem. Jednak z bashem robi to bzdury.
  • Jak wykonać gg=G z powłoki bez otwierania pliku?
  • @takeshin, czy możesz proszę wyjaśnić to znacznie dokładniej, czy musimy wpisać to w pliku, czy też musimy uruchomić go w terminalu

Odpowiedź

Nie wiem o automatycznym formatowaniu istniejącego kodu, ale jeśli piszesz kod i potrzebujesz automatycznego wcięcia:

  • :set autoindent (lub :set ai) włączy automatyczne wcięcie
  • Ctrl d , aby usunąć wcięcie (AKA przestarzały) Twój kod
  • Tabulatory lub spacje do wcięcia – osobiście używam tabulatora
  • :set tabwidth=4 (lub :set tw=4) będzie kontrolować, o ile spacji tabulator powinien wcinać kod
  • Polecenie >> spowoduje wcięcie bieżącego wiersza. Jeśli przedrostek wprowadzi do liczbę, powiedz 4>>, a następnie doda wcięcie 4 wiersze, zaczynając od bieżącego wiersza.
  • Podobnie Polecenie << usunie wcięcie wiersza

Mam nadzieję, że to dobry początek.

Komentarze

  • Aby automatycznie wprowadzić wcięcie w istniejącym kodzie, użyj ={motion} w trybie normalnym – np. =G spowoduje wcięcie całego kodu od bieżącego wiersza do końca pliku. == spowoduje wcięcie bieżącej linii.
  • upewnij się także, że ładowane są wtyczki wcięć (np. z :filetype indent on)
  • set tw = 4 ustawia TEXTWIDTH na 4

Odpowiedź

Automatyczne wcięcie *.sh

Po prostu dodaj następujące wiersze w ~/.vimrc

filetype indent on set smartindent autocmd BufRead,BufWritePre *.sh normal gg=G 

Komentarze

  • Czy dotyczy to tylko edycji w vimie czy wszystkich narzędzi edytora?
  • ~./vimrc dotyczy tylko edytora vim.

Odpowiedź

Ta wtyczka ułatwia formatowanie kodu . Integruje zewnętrzne elementy formatujące i ma rezerwę funkcji wcięcia vima.

https://github.com/Chiel92/vim-autoformat

Zwróć też uwagę na różnicę między formatowaniem a wcięciami. Wcięcie koryguje tylko białe znaki przed każdym wierszem, podczas gdy formatowanie zajmuje się również innymi rzeczami, takimi jak spacje wokół operatorów itp.

Odpowiedź

Utwórz / edytuj plik ~/.vimrc i dodaj następujący wiersz:

set autoindent 

Komentarze

  • To nic nie dodaje do istniejących odpowiedzi …
  • @jasonwryan Właściwie Hai Vu ' w odpowiedzi wspomina :set autoindent, który włącza automatyczne wcięcie tylko dla bieżącego pliku. Dodanie go w .vimrc włącza automatyczne wcięcie na stałe.
  • Twój komentarz jest już wspomniany przez odpowiedź Rahula ', więc zastanów się przed opublikowaniem

Odpowiedź

Autoformatowanie / wcięcie

vim „działa całkiem nieźle. Najpierw umieść tę linię w swoim ~/.vimrc:

filetype plugin indent on 

Następnie otwórz plik w vimie i wpisz gg=G

(gg przenosi kursor do pierwszej linii. = uruchamia polecenie indent. G mówi polecenie indent, aby zostało uruchomione od tego miejsca do ostatniej linii.)

Jeśli autoformat wygląda naprawdę źle, na przykład każda linia ma wcięcie po lewej stronie, uruchom :scriptnames i sprawdź, czy .../indent/html.vim (lub inny język, którego „używasz) znajduje się na liście. Jeśli nie, upewnij się, że ~/.vimrc jest poprawny. Lub jeśli uruchomiłeś :filetype plugin indent on z wiersza poleceń vima, będziesz musiał ponownie otworzyć plik :e

Odpowiedz

Aby przeprowadzić ponowne formatowanie skryptu bash, zaproponowane rozwiązanie gg = G nie działa dobrze w VIM, niezależnie od tego, czy ustawisz skrypt na typ powłoki. Zamiast tego działa;

shfmt -i 2 -ci script.sh

Aby zidentyfikować wszystkie wiersze za pomocą 2 spacji i poprawić formatowanie w inny sposób.

Odpowiedź

W bashu robię to:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}") declare -f Zibri| cut -c 5-|head --lines=-1|tail --lines=+3 

eliminuje to komentarze i zmienia w skrócie skrypt „bash way”. działa, jeśli skrypt zawiera HEREDOCS, ale jeśli to zrobisz:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}") declare -f Zibri|head --lines=-1|tail --lines=+3 

zadziała z każdym skryptem, ale cały skrypt będzie wcięty 4 spacjami. nie krępuj się modyfikować, ale zacytuj moje imię w swoim skrypcie i opublikuj! : D

Komentarze

  • Myślę, że to może nie mieć sensu w pytaniu; zamiast wciskać zestaw wierszy, uważam, że OP chciał automatycznie wprowadzić wcięcie w VIM dla różnych języków. Nawiasem mówiąc, jeśli sobie tego życzysz, możesz to osiągnąć nieco bardziej bezpośrednio dzięki sed: cat script_to_be_reindented.sh | sed 's#^# #g' (no cóż, SO markdown zastępuje spacje tabulatorem, ale rozumiesz)
  • Wszystko, co robi ta odpowiedź, to wstawianie spacji na początku wiersza i resetowanie całego wyrównania. To samo (z wyjątkiem przeceny) można zrobić za pomocą sed -i 's|^[ \t]\+| |' script.sh (czyli 4 spacje wewnątrz | |, ale ta witryna filtruje wiele spacji w jedną) .

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *