Automatische inspringing / opmaakcode voor Vim?

Ik probeer Vim steeds vaker te gebruiken wanneer ik kan. Een van mijn grootste problemen tussen Vim en een IDE zoals Aptana is de mogelijkheid om automatisch te laten inspringen .

Is er een manier om code automatisch op te maken (HTML, CSS, PHP) zodat deze correct wordt ingesprongen?

Zo ja, hoe installeer je dit in vim? begrijp plug-ins erg goed. Ik heb geprobeerd deze thread te bekijken en het bracht me meer in de war: Hoe verander ik het gedrag van automatisch inspringen van vim?

Reacties

  • Kunt u verduidelijken welke taal u probeert te laten inspringen? Ik zou verwachten dat als het ‘ s al ondersteund wordt door vim, het automatisch automatisch zou inspringen zonder verdere inspanning. Als dit niet het geval is, zou u een plug-in moeten kunnen krijgen.
  • idealiter Html / css en php

Antwoord

Om het hele bestand automatisch te laten inspringen:

gg =G 

Uitgelegd:

  • gg – ga naar het begin van het bestand
  • G – ga naar het einde van het bestand
  • = indent

Reacties

  • Kunt u het opsplitsen? Wat is g typisch op zichzelf? en = G?
  • @Chris zie de bewerking
  • Leuke hint, ik heb dit nooit geweten. Het doet echter een waardeloze klus met bash.
  • Hoe voer je gg=G uit vanuit de shell zonder het bestand te openen?
  • @takeshin kun je leg het alstublieft veel verder uit, moeten we het in het bestand typen of moeten we het in de terminal uitvoeren

Antwoord

Ik weet niets over het automatisch formatteren van bestaande code, maar als je code schrijft en automatisch inspringen nodig hebt:

  • :set autoindent (of :set ai) zal automatisch inspringen inschakelen
  • Ctrl d om het inspringen ongedaan te maken (AKA outdent) uw code
  • Tabblad of spaties om te laten inspringen – ik gebruik persoonlijk tab
  • :set tabwidth=4 (of :set tw=4) bepaalt hoeveel spaties een tab code moet laten inspringen
  • Het >> commando zal de huidige regel laten inspringen. Als je het voorvoegsel met een nummer, zeg 4>>, dan zal het 4 regels laten inspringen, beginnend met de huidige regel.
  • Evenzo de << commando zal een regel ongedaan maken

Ik hoop dat dit je een goed begin geeft.

Opmerkingen

  • Om bestaande code automatisch te laten inspringen, gebruik ={motion} in de normale modus – bijv. =G zal alle code laten inspringen vanaf de huidige regel tot het einde van het bestand. == zal de huidige regel laten inspringen.
  • Zorg er ook voor dat inspringende plug-ins worden geladen (bijv. met :filetype indent on)
  • set tw = 4 stelt de TEXTWIDTH in op 4

Answer

Automatisch inspringen *.sh

Voeg gewoon de volgende regels toe in ~/.vimrc

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

Reacties

  • Is dit alleen van toepassing op bewerken met vim of alle editorhulpmiddelen?
  • ~./vimrc alleen van toepassing op vim editor.

Answer

Deze plug-in maakt het gemakkelijker om je code te formatteren . Het integreert externe formatters, en heeft een terugval op vim “s indent-functionaliteit.

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

Merk ook het verschil op tussen opmaak en inspringen. Inspringen corrigeert alleen de witruimte vóór elke regel, terwijl het formatteren ook betrekking heeft op andere zaken, zoals witruimte rond operatoren enz.

Antwoord

Maak / bewerk het ~/.vimrc -bestand en voeg de volgende regel toe:

set autoindent 

Reacties

  • Dit voegt niets toe aan de bestaande antwoorden …
  • @jasonwryan Eigenlijk Hai Vu ‘ s antwoord vermeldt :set autoindent waardoor automatisch inspringen alleen voor het huidige bestand mogelijk is. Door het toe te voegen aan de .vimrc -bestand maakt automatisch inspringen permanent mogelijk.
  • Je commentaar wordt al genoemd door het antwoord van Rahul ‘, dus denk na voordat je iets plaatst

Answer

vim “s autoformat / indent werkt redelijk goed. Zet deze regel eerst in uw ~/.vimrc:

filetype plugin indent on 

Open vervolgens een bestand in vim en typ gg=G

(gg verplaatst de cursor naar de eerste regel. = voert de indent commando. G vertelt het inspringen commando om vanaf hier naar de laatste regel te draaien.)

Als het autoformat er erg slecht uitziet, zoals elke regel is gewoon ingesprongen, voer dan :scriptnames uit en controleer of .../indent/html.vim (of welke taal je ook gebruikt) staat in de lijst. Zo niet, zorg er dan voor dat je ~/.vimrc correct is. Of als je :filetype plugin indent on vanaf de vim-opdrachtregel, moet u het bestand :e

Answer

Om een bash-script opnieuw te formatteren, werkt de voorgestelde gg = G-oplossing niet goed in VIM, ongeacht of je het script instelt als shell-type. In plaats daarvan werkt dit;

shfmt -i 2 -ci script.sh

Om alle regels met 2 spaties te identificeren en de andere opmaak te corrigeren.

Antwoord

In bash doe ik dit:

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

dit elimineert opmerkingen en herindigt het script “bash way”. het zal niet werken als het script HEREDOCS bevat, maar als je dit doet:

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

het werkt met elk script, maar het hele script wordt ingesprongen met 4 spaties. voel je vrij om te wijzigen, maar noem mijn naam in je script en plaats het! : D

Opmerkingen

  • Ik denk dat dit misschien het punt van de vraag mist; in plaats van een reeks regels te laten inspringen, geloof ik dat het OP voor een verscheidenheid aan talen automatisch wilde inspringen binnen VIM. Even terzijde, u kunt dit misschien iets directer bereiken met sed als u dat wilt: cat script_to_be_reindented.sh | sed 's#^# #g' (eh, nou ja, Dus markdown vervangt de spaties door een tab, maar je begrijpt het punt)
  • Het enige dat dit antwoord doet is spaties invoegen vooraan de regel en alle uitlijning resetten. Hetzelfde (met uitzondering van markdown) kan worden gedaan met sed -i 's|^[ \t]\+| |' script.sh (dat zijn 4 spaties binnen de | | maar deze website filtert meerdere spaties in één) .

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *