Jeg prøver å bruke Vim mer og mer når jeg kan. Et av mine største grep mellom Vim og en IDE som Aptana er muligheten til automatisk innrykk .
Er det et middel til automatisk formatering av kode (HTML, CSS, PHP) så den er riktig innrykket?
Hvis ja, hvordan installerer du dette i vim? Jeg vet ikke forstår plugins veldig mye. Jeg prøvde å gjennomgå denne tråden, og det forvirret meg mer: Hvordan endrer jeg vim auto-indent atferd?
Kommentarer
- Kan du avklare hvilket språk du prøver å innrykke? Jeg forventer at hvis den ‘ støttes av vim allerede, bør den allerede innrykkes uten ytterligere anstrengelse. Hvis ikke, bør du kunne få et plugin.
- ideelt sett Html / css og php
Svar
For å rykke inn hele filen automatisk:
gg =G
Forklart:
-
gg
– gå til begynnelsen av filen -
G
– gå til slutten av filen -
=
– innrykk
Kommentarer
- Kan du bryte det ned? Hva er g vanligvis av seg selv? og = G?
- @Chris se redigeringen
- Fint hint, jeg visste aldri dette. Imidlertid gjør det en søppeljobb med bash.
- Hvordan kjøres
gg=G
fra skall uten å åpne filen? - @takeshin kan du vennligst forklar det mye lenger, trenger vi å skrive det i filen eller trenger vi å kjøre det i terminalen
Svar
Jeg vet ikke om automatisk formatering av eksisterende kode, men hvis du skriver kode og trenger automatisk innrykk:
-
:set autoindent
(eller:set ai
) slår på automatisk innrykk - Ctrl – d for å fjerne innrykk (AKA outdent) koden din
- Tab eller mellomrom for å rykke inn – Jeg bruker personlig tab
-
:set tabwidth=4
(eller:set tw=4
) vil kontrollere hvor mange mellomrom en fane skal innrykke kode - Kommandoen
>>
vil innrykke gjeldende linje. Hvis du prefikser den med et tall, si4>>
så vil det trekke inn fire linjer, med utgangspunkt i gjeldende linje. - På samme måte
<<
kommando vil fjerne innrykk på en linje
Jeg håper dette gir deg en god start.
Kommentarer
- For å automatisk innrykke eksisterende kode, bruk
={motion}
i normal modus – f.eks.=G
innrykker all kode fra gjeldende linje til slutten av filen.==
vil innrykke gjeldende linje. - Sørg også for at innrykk-plugins lastes inn (f.eks. med
:filetype indent on
) - sett tw = 4 setter TEXTWIDTH til 4
Svar
Auto indent *.sh
Bare legg til følgende linjer i ~/.vimrc
filetype indent on set smartindent autocmd BufRead,BufWritePre *.sh normal gg=G
Kommentarer
- Gjelder dette bare redigering med vim eller alle redigeringsverktøy?
-
~./vimrc
gjelder bare for vim-editor.
Svar
Dette pluginet gjør det lettere å utføre formatering på koden din . Den integrerer eksterne formatører, og har en tilbakemelding på vim «s innrykkfunksjonalitet.
https://github.com/Chiel92/vim-autoformat
Legg også merke til forskjellen mellom formatering og innrykk. Innrykk korrigerer bare mellomrom før hver linje, mens formatering også omhandler andre ting, for eksempel mellomrom rundt operatører osv.
Svar
Opprett / rediger ~/.vimrc
-filen og legg til følgende linje:
set autoindent
Kommentarer
- Dette legger ikke noe til de eksisterende svarene …
- @jasonwryan Egentlig Hai Vu ‘ s svar nevner
:set autoindent
som bare muliggjør automatisk innrykk for den nåværende filen. Legger til den i.vimrc
file muliggjør automatisk innrykk permanent. - kommentaren din er allerede nevnt av Rahul ‘ sitt svar, så tenk før du legger ut
Svar
vim «s autoformat / innrykk fungerer ganske bra. Først setter du denne linjen i ~/.vimrc
:
filetype plugin indent on
Deretter åpner du en fil i vim og skriver gg=G
(gg
flytter markøren til første linje. =
kjører innrykk-kommando. G
forteller innrykkskommando om å kjøre herfra til siste linje.)
Hvis autoformatet ser veldig dårlig ut, som om hver linje bare er igjen innrykket, så kjør :scriptnames
og sjekk om .../indent/html.vim
(eller hvilket språk du bruker) er i listen. Hvis ikke, må du sørge for at ~/.vimrc
er riktig. Eller hvis du kjørte :filetype plugin indent on
fra vim-kommandolinjen, må du åpne filen på nytt :e
Svar
For å gjøre en omformatering av bash-skript, fungerer gg = G-løsningen som er foreslått ikke bra i VIM, uansett om du setter skriptet til å være skalltype. I stedet fungerer dette;
shfmt -i 2 -ci script.sh
For å identifisere alle linjer med to mellomrom og korrigere ellers formatering.
Svar
I bash gjør jeg dette:
source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}") declare -f Zibri| cut -c 5-|head --lines=-1|tail --lines=+3
dette eliminerer kommentarer og reindenter skriptet «bash way». det vil ikke fungerer hvis skriptet inneholder HEREDOCS, men hvis du gjør dette:
source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}") declare -f Zibri|head --lines=-1|tail --lines=+3
det fungerer med hvilket som helst skript, men hele skriptet vil være innrykket med fire mellomrom. modifiser gjerne, men siter navnet mitt i skriptet ditt og legg det ut! : D
Kommentarer
- Jeg tror dette kan mangle poenget med spørsmålet; i stedet for å innrykke et sett med linjer, tror jeg OP ønsket å automatisk innrykk i VIM for en rekke språk. Som en side kan du kanskje oppnå dette litt mer direkte med
sed
hvis du ønsker det:cat script_to_be_reindented.sh | sed 's#^# #g'
(er, vel, SO markdown erstatter mellomrommene med en fane, men du skjønner poenget) - Alt dette svaret gjør er å sette inn mellomrom foran på linjen og tilbakestille all justering. Det samme (unntatt markdown) kan gjøres med
sed -i 's|^[ \t]\+| |' script.sh
(det vil si 4 mellomrom inne i| |
, men dette nettstedet filtrerer flere mellomrom i ett) .