Comment aligner le code (accolades, parens etc) dans vi?
3 réponses
ces commandes dans ma réponse fonctionnent dans vim. La plupart des gens qui pensent utiliser vi utilisent vim. Pour savoir si votre 'vi' est vraiment 'vim', ouvrez vi et tapez :version
-- si c'est vim, il le dira. Sinon, vous pouvez voir un numéro de version sans le nom du programme. En outre, lorsque vous ouvrez vim pour la première fois, vous verrez généralement un écran de projection d'une sorte qui dit "VIM - VI améliorée"...
Indentation Automatique
pour activer l'auto-indentation, assurez-vous que vim connaît le type de fichier que vous éditez (il détecte généralement automatiquement cela à partir de l'extension du nom de fichier, mais pourrait ne pas le comprendre avec certains types de fichiers). Vous pouvez lui dire le type de fichier en utilisant les menus pour la mise en évidence de la syntaxe. Puis, faites ceci:
:filetype indent on
vous pouvez désactiver l'auto-indentation avec
:filetype indent off
automatiquement ajustement / correction de l'indentation
en général, = {motion} alignera le code sur un niveau d'indentation.
-
==
aligner la ligne actuelle -
=i{
aligner le bloc intérieur -
=%
alignez-vous sur la correspondance parenthèse / bracket sous le curseur -
=14j
ou14==
aligner les 14 lignes suivantes -
=G
alignez-vous à la fin du fichier -
vG=
même chose, alignez-vous à la fin de la fichier (mais en utilisant le mode visuel) -
vjjj=
aligner quatre. lignes (en utilisant le mode visuel)
indentation manuelle
Si vim ne devine pas correctement le niveau d'indentation, il y a deux façons de le changer:
- si vous êtes en mode normal (où tout est une commande), faites
<<
pour décaler une ligne à gauche, ou>>
pour la décaler à droite d'un onglet. Vous pouvez le faire avec plusieurs lignes en utilisant les mêmes commandes de mouvement que j'ai montré ci-dessus (par ex.,>i{
indents the current inner code block). - si vous êtes en mode insert, vous pouvez indenter la ligne plus loin (sans déplacer le curseur) en faisant un Ctrl-T , ou un-tiret un onglet avec Ctrl-d
Alignement de signes "égal", etc
si vous voulez aligner des signes égaux dans une liste de déclarations, vous devriez envisager d'utiliser ce script vim: http://www.vim.org/scripts/script.php?script_id=294
ajustement de la taille des indentations /onglets
"si vous voulez que vim utilise des espaces au lieu d'onglets quand il indente, exécutez cette commande (ou envisagez de l'ajouter à votre fichier vimrc)
:set expandtab
pour fixer combien les espaces égalent un onglet, je fais habituellement ceci:
:set expandtab softtabstop=3 tabstop=3 shiftwidth=3
- tabstop-combien de colonnes un onglet compte pour (affecte l'affichage des caractères d'onglet existants)
- shiftwidth-contrôle la taille de réindentation avec << et >>, entre autres commandes.
- softabstop-combien d'espace à insérer lorsque vous appuyez sur la touche de tabulation
- expandtab - élargir les touches de tabulation pour les espaces
Mais si vous avez à travailler avec différentes quantités d'onglets beaucoup, vous pouvez également utiliser cette fonction et raccourci clavier:
function! Ktabs(tabsize)
execute "set softtabstop=" . a:tabsize . " tabstop=" . a:tabsize . " expandtab shiftwidth=" . a:tabsize
"set softtabstop=a:tabsize tabstop=a:tabsize expandtab shiftwidth=a:tabsize
endfunction
noremap <leader><Tab> :call Ktabs(3)<Left>
si vous éditez un fichier avec un mélange d'onglets et d'espaces, vous pouvez utiliser cette commande après avoir défini la taille de l'onglet:
:retab
={motion}
:h =
si j'ajuste manuellement les tirets, j'ouvre un bloc visuel avec V
sur la première ou la dernière ligne que je veux ré-indenter, je me déplace vers la brace contenant le bloc, je vais à l'autre brace avec %
puis décaler la ligne avec >
ou <
si les tirets sont coupés de beaucoup, je vais déplacer tout le chemin à gauche avec <
et le répéter avec .
et puis tout re-indenter.
une autre solution est pour utiliser la commande unix fmt
comme décrit dans votre problème avec Vim est que vous ne grok vi. , {!}fmt