Jessaie dutiliser de plus en plus Vim quand je le peux. Lune de mes plus grandes prises entre Vim et un IDE comme Aptana est la possibilité de mettre automatiquement en retrait .
Existe-t-il un moyen de formatage automatique du code (HTML, CSS, PHP) pour quil soit correctement mis en retrait?
Si oui, comment linstaller dans vim? Je ne « t comprendre beaucoup les plugins. Jai essayé de revoir ce fil de discussion et cela ma encore plus dérouté: Comment changer le comportement de lindentation automatique de vim?
Commentaires
- Pourriez-vous clarifier la langue que vous essayez dindenter? Je mattendrais à ce que si elle ‘ est déjà prise en charge par vim, elle devrait déjà sauto-indenter sans effort supplémentaire. Sinon, vous devriez pouvoir obtenir un plugin.
- idéalement Html / css et php
Réponse
Pour indenter automatiquement tout le fichier:
gg =G
Expliqué:
-
gg
– aller au début du fichier -
G
– aller à la fin du fichier -
=
– indent
Commentaires
- Pourriez-vous le décomposer? Quest-ce que g typiquement en soi? et = G?
- @Chris voir la modification
- Bon indice, je ne lai jamais su. Cependant, il fait un travail inutile avec bash.
- Comment exécuter
gg=G
à partir du shell sans ouvrir le fichier? - @takeshin pouvez-vous veuillez lexpliquer beaucoup plus loin, devons-nous le saisir dans le fichier ou devons-nous lexécuter dans le terminal
Réponse
Je ne connais pas le formatage automatique du code existant, mais si vous écrivez du code et avez besoin dun retrait automatique:
-
:set autoindent
(ou:set ai
) activera lindentation automatique - Ctrl – d pour annuler lindentation (AKA outdent) votre code
- Tabulation ou espaces à indenter – Jutilise personnellement longlet
-
:set tabwidth=4
(ou:set tw=4
) contrôlera le nombre despaces quun onglet doit mettre en retrait dans le code - La commande
>>
mettra en retrait la ligne courante. Si vous préfixez un nombre, dites4>>
puis il mettra en retrait 4 lignes, en commençant par la ligne actuelle. - De même La commande
<<
supprimera le retrait dune ligne
Jespère que cela vous donne un bon début.
Commentaires
- Pour indenter automatiquement le code existant, utilisez
={motion}
en mode normal – par exemple=G
mettra en retrait tout le code de la ligne actuelle à la fin du fichier.==
mettra en retrait la ligne actuelle. - sassurera également que les plug-ins dindentation sont en cours de chargement (par exemple avec
:filetype indent on
) - set tw = 4 définit la TEXTWIDTH sur 4
Answer
Auto Indent *.sh
Ajoutez simplement les lignes suivantes dans ~/.vimrc
filetype indent on set smartindent autocmd BufRead,BufWritePre *.sh normal gg=G
Commentaires
- Cela sapplique-t-il uniquement à lédition avec vim ou avec tous les outils dédition?
-
~./vimrc
applicable uniquement pour léditeur vim.
Réponse
Ce plugin facilite la mise en forme de votre code . Il intègre des formateurs externes et propose une solution de secours sur la fonctionnalité de retrait de vim.
https://github.com/Chiel92/vim-autoformat
Notez également la différence entre la mise en forme et la mise en retrait. La mise en retrait ne corrige que les espaces avant chaque ligne, tandis que la mise en forme traite également toute autre chose, comme les espaces autour des opérateurs, etc.
Réponse
Créez / modifiez le fichier ~/.vimrc
et ajoutez la ligne suivante:
set autoindent
Commentaires
- Cela najoute rien aux réponses existantes …
- @jasonwryan En fait Hai Vu La réponse de ‘ mentionne
:set autoindent
qui active lindentation automatique uniquement pour le fichier actuel. Lajout dans le.vimrc
active lindentation automatique de manière permanente. - votre commentaire est déjà mentionné par la réponse de Rahul ‘, alors réfléchissez avant de publier
Réponse
vim « fonctionne plutôt bien. Tout dabord, mettez cette ligne dans votre ~/.vimrc
:
filetype plugin indent on
Ensuite, ouvrez un fichier dans vim et tapez gg=G
(gg
déplace le curseur sur la première ligne. =
exécute le commande indent. G
indique à la commande indent de sexécuter dici à la dernière ligne.)
Si lautoformat semble vraiment mauvais, comme si chaque ligne est juste laissée en retrait, exécutez :scriptnames
et vérifiez si .../indent/html.vim
(ou la langue que vous utilisez) est dans la liste. Sinon, assurez-vous que votre ~/.vimrc
est correct. Ou si vous avez exécuté :filetype plugin indent on
depuis la ligne de commande vim, vous devrez rouvrir le fichier :e
Réponse
Pour faire un reformatage de script bash, la solution gg = G proposée ne fonctionne pas bien dans VIM, que vous définissiez le script comme étant de type shell. Au lieu de cela, cela fonctionne;
shfmt -i 2 -ci script.sh
Pour identifier toutes les lignes avec 2 espaces et corriger le formatage.
Réponse
En bash je fais ceci:
source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}") declare -f Zibri| cut -c 5-|head --lines=-1|tail --lines=+3
cela élimine les commentaires et réindente le script « bash way ». il ne le sera pas fonctionne si le script contient HEREDOCS mais si vous faites ceci:
source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}") declare -f Zibri|head --lines=-1|tail --lines=+3
cela fonctionnera avec nimporte quel script mais le script entier sera mis en retrait de 4 espaces. nhésitez pas à modifier mais citez mon nom dans votre script et postez-le! : D
Commentaires
- Je crois que cela peut manquer le point de la question; plutôt que dindenter un ensemble de lignes, je pense que lOP souhaitait indenter automatiquement dans VIM pour une variété de langues. En passant, vous pourrez peut-être y parvenir un peu plus directement avec
sed
si vous le souhaitez:cat script_to_be_reindented.sh | sed 's#^# #g'
(euh, eh bien, SO markdown remplace les espaces par une tabulation, mais vous obtenez le point) - Tout ce que cette réponse fait est dinsérer des espaces au début de la ligne et de réinitialiser tout lalignement. La même chose (hors démarque) peut être effectuée avec
sed -i 's|^[ \t]\+| |' script.sh
(cest-à-dire 4 espaces à lintérieur de| |
mais ce site Web filtre plusieurs espaces en un seul) .