Auto indrag / formatkod för Vim?

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äg 4>> 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) .

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *