Automatisk indrykning / formatkode til Vim?

Jeg prøver at bruge Vim mere og mere, når jeg kan. Et af mine største greb mellem Vim og en IDE som Aptana er evnen til automatisk indrykning .

Er der et middel til automatisk formateringskode (HTML, CSS, PHP), så den er korrekt indrykket?

Hvis ja, hvordan installerer du dette i vim? Jeg ved ikke forstå plugins meget. Jeg prøvede at gennemgå denne tråd, og det forvirrede mig mere: Hvordan ændrer jeg vim auto-indent adfærd?

Kommentarer

  • Kan du afklare, hvilket sprog du prøver at indrykke? Jeg forventer, at hvis det ‘ understøttes af vim allerede, skal det allerede automatisk indrykke uden yderligere indsats. Hvis ikke, skal du kunne få et plugin.
  • ideelt set Html / css og php

Svar

Sådan indrykkes hele filen automatisk:

gg =G 

Forklaret:

  • gg – gå til begyndelsen af filen
  • G – gå til slutningen af filen
  • = indrykning

Kommentarer

  • Kunne du nedbryde det? Hvad er g typisk i sig selv? og = G?
  • @Chris se redigeringen
  • Dejligt tip, jeg vidste aldrig dette. Det gør dog noget affald med bash.
  • Hvordan udføres gg=G fra shell uden at åbne filen?
  • @takeshin kan du dog forklar det meget længere, skal vi skrive det i filen, eller skal vi køre det i terminalen

Svar

Jeg ved ikke om automatisk formatering af eksisterende kode, men hvis du skriver kode og har brug for automatisk indrykning:

  • :set autoindent (eller :set ai) aktiverer automatisk indrykning
  • Ctrl d for at fjerne indrykning (AKA outdent) din kode
  • Tab eller mellemrum til indrykning – jeg bruger personligt fane
  • :set tabwidth=4 (eller :set tw=4) styrer, hvor mange mellemrum en fane skal indrykke kode
  • Kommandoen >> indrykker den aktuelle linje. Hvis du præfikser den ved et tal, sig 4>> så indrykker det 4 linjer, startende med den aktuelle linje.
  • Ligeledes << kommando vil fjerne indrykning af en linje

Jeg håber, det giver dig en god start.

Kommentarer

  • For automatisk at indrykke eksisterende kode skal du bruge ={motion} i normal tilstand – f.eks. =G indrykker al kode fra den aktuelle linje til slutningen af filen. == indrykker den aktuelle linje.
  • Sørg også for, at indryknings-plugins indlæses (f.eks. med :filetype indent on)
  • sæt tw = 4 indstiller TEXTWIDTH til 4

Svar

Auto indrykning *.sh

Tilføj bare følgende linjer i ~/.vimrc

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

Kommentarer

  • Gælder dette kun redigering med vim eller alle redigeringsværktøjer?
  • ~./vimrc gælder kun for vim-editor.

Svar

Dette plugin gør det lettere at udføre formatering på din kode . Det integrerer eksterne formatere og har et tilbagefald til vims indrykningsfunktionalitet.

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

Læg også mærke til forskellen mellem formatering og indrykning. Indrykning korrigerer kun det hvide område før hver linje, mens formatering også beskæftiger sig med andre ting, såsom hvidt mellem operatører osv.

Svar

Opret / rediger ~/.vimrc -filen og tilføj følgende linje:

set autoindent 

Kommentarer

  • Dette tilføjer intet til de eksisterende svar …
  • @jasonwryan Faktisk Hai Vu ‘ s svar nævner :set autoindent som kun muliggør automatisk indrykning for den aktuelle fil. Tilføjelse af den i .vimrc -fil aktiverer automatisk indrykning permanent.
  • dit kommentar er allerede nævnt af Rahul ‘ s svar, så tænk inden du sender

Svar

vim “s autoformat / indent fungerer ret godt. Sæt først denne linje i din ~/.vimrc:

filetype plugin indent on 

Åbn derefter en fil i vim og skriv gg=G

(gg flytter markøren til den første linje. = kører indent kommando. G fortæller indent kommando at køre herfra til den sidste linje.)

Hvis autoformatet ser rigtig dårligt ud, som om hver linje lige er indrykket, skal du køre :scriptnames og kontrollere, om .../indent/html.vim (eller hvilket sprog du bruger) er på listen. Hvis ikke, skal du sørge for, at din ~/.vimrc er korrekt. Eller hvis du løb :filetype plugin indent on fra kommandolinjen vim skal du åbne filen igen :e

Svar

For at lave en bash-script-omformatering fungerer den foreslåede løsning gg = G ikke godt i VIM, uanset om du indstiller scriptet til at være af shell-type. I stedet fungerer dette;

shfmt -i 2 -ci script.sh

For at identificere alle linjer med 2 mellemrum og korrigere ellers formatering.

Svar

I bash gø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 genindleder scriptet “bash way”. det vil ikke arbejde, hvis scriptet indeholder HEREDOCS, men hvis du gør dette:

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

det fungerer med ethvert script, men hele scriptet indrykkes med 4 mellemrum. er du velkommen til at ændre, men citer mit navn i dit script og post det! : D

Kommentarer

  • Jeg tror, at dette muligvis mangler spørgsmålet; snarere end at indrykke et sæt linjer, tror jeg, at OP ønskede at automatisk indrykke inden for VIM på en række forskellige sprog. Som en side, kan du muligvis opnå dette lidt mere direkte med sed, hvis du ønsker det: cat script_to_be_reindented.sh | sed 's#^# #g' (er, ja, SO markdown erstatter mellemrum med en fane, men du får pointen)
  • Alt dette svar gør er at indsætte mellemrum i fronten af linjen og nulstille al justering. Det samme (undtagen markdown) kan gøres med sed -i 's|^[ \t]\+| |' script.sh (dvs. 4 mellemrum inde i | |, men dette websted filtrerer flere mellemrum i et) .

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *