web-dev-qa-db-fra.com

Comment aligner le code (accolades, parens, etc.) dans vi?

Comment embellir/aligner/formater le code dans vi? Quelle est la commande?

J'ai collé dans un morceau de code et je dois tout avoir formaté/aligné ... évidemment je suis un néophyte vi.

x

28
Xofo

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, ça le dira. Sinon, vous pourriez simplement voir un numéro de version sans le nom du programme. De plus, lorsque vous ouvrez vim pour la première fois, vous verrez généralement un écran de démarrage d'une sorte qui dit "VIM - VI iMproved" ...

Indentation automatique

Pour activer l'indentation automatique, assurez-vous que vim connaît le type de fichier que vous modifiez (il le détecte généralement automatiquement à partir de l'extension de nom de fichier, mais peut ne pas le comprendre avec certains types de fichiers). Vous pouvez lui indiquer le type de fichier en utilisant les menus pour la coloration syntaxique. Ensuite, faites ceci:

:filetype indent on

Vous pouvez désactiver l'indentation automatique avec

:filetype indent off

Réglage/correction automatique de l'indentation

En général, = {motion} alignera le code sur un niveau d'indentation.

  • == aligner la ligne courante
  • =i{ aligner le bloc intérieur
  • =% aligner sur la parenthèse/parenthèse correspondante sous le curseur
  • =14j ou 14== aligner les 14 lignes suivantes
  • =G aligner à la fin du fichier
  • vG= même chose, aligner à la fin du fichier (mais en utilisant le mode visuel)
  • vjjj= aligner quatre lignes (en utilisant le mode visuel)

Retrait manuel

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 vers la gauche, ou >> pour le déplacer vers la droite d'un onglet. Vous pouvez le faire avec plusieurs lignes en utilisant les mêmes commandes de mouvement que celles montrées ci-dessus (par exemple, >i{ indente le bloc de code interne actuel).
  • Si vous êtes en mode d'insertion, vous pouvez indenter davantage la ligne (sans déplacer le curseur) en faisant un Ctrl-T , ou désindenter un onglet avec Ctrl-D

Aligner des signes égaux, etc.

Si vous souhaitez 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

Réglage des tailles de retrait/tabulation

Si vous souhaitez que vim utilise des espaces au lieu des tabulations lorsqu'il se met en retrait, exécutez cette commande (ou envisagez de l'ajouter à votre fichier vimrc)

 :set expandtab

Pour définir le nombre d'espaces égal à un onglet, je fais généralement ceci:

 :set expandtab softtabstop=3 tabstop=3 shiftwidth=3
  • tabstop - combien de colonnes un onglet compte (affecte l'affichage des caractères de tabulation existants)
  • shiftwidth - contrôle la taille de réindentation avec << et >>, entre autres commandes.
  • softtabstop - combien d'espace à insérer lorsque vous appuyez sur la touche de tabulation
  • expandtab - étend les touches de tabulation aux espaces

Mais si vous devez beaucoup travailler avec différentes quantités d'onglets, vous pouvez également utiliser cette fonction et le 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 modifiez un fichier avec un mélange d'onglets et d'espaces, vous souhaiterez peut-être utiliser cette commande après avoir défini la taille de l'onglet:

:retab
45
Kimball Robinson

={motion}

:h =

P.S. Vous ne devez pas utiliser vi si vim est disponible.

5
wRAR

Si vous ajustez manuellement les retraits, j'ouvrirai un bloc visuel avec V sur la première ou la dernière ligne que je souhaite ré-indenter, passer à l'accolade contenant le bloc, passer à l'autre accolade avec % puis décaler la ligne avec > ou <

Si les retraits sont beaucoup décalés, je déplacerai tout à gauche avec < et répétez avec . puis tout réindenter.

Une autre solution consiste à utiliser la commande unix fmt comme décrit dans Votre problème avec Vim est que vous ne bloquez pas vi. , {!}fmt

4
Winder