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, zeg4>>
, 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) .