Jag försöker använda Vim mer och mer när jag kan. Ett av mina största grepp mellan Vim och en IDE som Aptana är möjligheten att automatiskt dra in .
Finns det ett medel för automatisk formateringskod (HTML, CSS, PHP) så att den är ordentligt indragen?
Om ja, hur installerar du detta i vim? Jag vet inte förstår plugins mycket. Jag försökte granska den här tråden och det förvirrade mig mer: Hur ändrar jag vim auto-indrag beteende?
Kommentarer
- Kan du klargöra vilket språk du försöker dra in? Jag förväntar mig att om den ’ stöds av vim redan, bör den redan auto-indra utan ytterligare ansträngning. Om inte, skulle du kunna få ett plugin.
- helst Html / css och php
Svar
För att göra hela filen automatiskt:
gg =G
Förklaras:
-
gg
– gå till början av filen -
G
– gå till slutet av filen -
=
– indrag
Kommentarer
- Kan du bryta ner det? Vad är g vanligtvis i sig? och = G?
- @Chris se redigeringen
- Bra tips, jag visste aldrig det här. Det gör dock ett skräpjobb med bash.
- Hur man kör
gg=G
från skal utan att öppna filen? - @takeshin kan du vänligen förklara det mycket mer, behöver vi skriva det i filen eller behöver vi köra det i terminalen
Svar
Jag vet inte om automatisk formatering av befintlig kod, men om du skriver kod och behöver automatisk indragning:
-
:set autoindent
(eller:set ai
) aktiverar automatisk indragning - Ctrl – d till un-indent (AKA outdent) din kod
- Flik eller mellanslag för att dra in – Jag använder personligen fliken
-
:set tabwidth=4
(eller:set tw=4
) styr hur många mellanslag en flik ska inrycka kod - Kommandot
>>
indragar den aktuella raden. Om du prefixar ett tal, säg4>>
så kommer det att rita in fyra rader, med början med den aktuella raden. - Likaså
<<
-kommandot raderar en rad
Jag hoppas att detta ger dig en bra start.
Kommentarer
- För att automatiskt dra in befintlig kod, använd
={motion}
i normalt läge – t.ex.=G
indrycker all kod från den aktuella raden till slutet av filen.==
kommer att dra in den aktuella raden. - Se också till att indrag-plugins laddas (t.ex. med
:filetype indent on
) - set tw = 4 anger TEXTWIDTH till 4
Answer
Auto Indent *.sh
Lägg bara till följande rader i ~/.vimrc
filetype indent on set smartindent autocmd BufRead,BufWritePre *.sh normal gg=G
Kommentarer
- Gäller detta endast redigering med vim eller alla redigeringsverktyg?
-
~./vimrc
endast tillämpligt för vim-editor.
Svar
Detta plugin gör det lättare att utföra formatering på din kod . Den integrerar externa formaterare och har en reserv för vim ”s indragfunktionalitet.
https://github.com/Chiel92/vim-autoformat
Lägg också märke till skillnaden mellan formatering och indragning. Indragning korrigerar bara det vita utrymmet före varje rad, medan formatering också handlar om något annat, till exempel mellanrum runt operatörer etc.
Svar
Skapa / redigera ~/.vimrc
-filen och lägg till följande rad:
set autoindent
Kommentarer
- Detta lägger inget till de befintliga svaren …
- @jasonwryan Egentligen Hai Vu ’ s svar nämner
:set autoindent
vilket endast möjliggör automatisk indragning för den aktuella filen. Lägg till den i.vimrc
-fil möjliggör automatisk indragning permanent. - din kommentar nämns redan av Rahul ’ s svar, så tänk innan du lägger upp
Svar
vim ”s autoformat / indent fungerar ganska bra. Sätt först den här raden i din ~/.vimrc
:
filetype plugin indent on
Öppna sedan en fil i vim och skriv gg=G
(gg
flyttar markören till första raden. =
kör indent-kommando. G
talar om indent-kommandot att springa härifrån till sista raden.)
Om autoformatet ser riktigt dåligt ut, som om varje rad bara är vänster, kör sedan :scriptnames
och kontrollera om .../indent/html.vim
(eller vilket språk du använder) finns i listan. Om inte, se till att din ~/.vimrc
är korrekt. Eller om du sprang :filetype plugin indent on
från vim-kommandoraden måste du öppna filen igen :e
Svar
För att göra en omformatering av bash-skript, fungerar den föreslagna gg = G-lösningen inte bra i VIM, oavsett om du ställer in skriptet som skaltyp. Istället fungerar det;
shfmt -i 2 -ci script.sh
För att identifiera alla rader med två mellanslag och korrigera annars formatering.
Svar
I bash gör jag det här:
source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}") declare -f Zibri| cut -c 5-|head --lines=-1|tail --lines=+3
detta eliminerar kommentarer och återinför skriptet ”bash way”. det kommer inte fungerar om manuset innehåller HEREDOCS men om du gör det här:
source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}") declare -f Zibri|head --lines=-1|tail --lines=+3
det fungerar med vilket skript som helst men hela skriptet indrycks av fyra mellanslag. modifiera gärna men citerar mitt namn i ditt manus och lägger upp det! : D
Kommentarer
- Jag tror att detta kanske saknar punkten i frågan; snarare än att indrycka en rad rader, tror jag att OP önskade att auto-indra i VIM för en mängd olika språk. Som en borta kan du kanske uppnå detta lite mer direkt med
sed
om du så önskar:cat script_to_be_reindented.sh | sed 's#^# #g'
(er, ja, SO-markdown ersätter mellanslag med en flik, men du förstår poängen) - Allt detta svar gör är att infoga mellanslag framför linjen och återställa all inriktning. Samma (exklusive markdown) kan göras med
sed -i 's|^[ \t]\+| |' script.sh
(det vill säga fyra mellanslag inuti| |
men den här webbplatsen filtrerar flera mellanslag i ett) .