Automatisk innrykk / formatkode for Vim?

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, si 4>> 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) .

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *