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

comment prettifier / aligner / formater le code dans vi? Quelle est la commande?

j'ai collé un morceau de code et j'ai besoin d'avoir tout formaté/alignés... évidemment, je suis un vi néophyte.

x

25
demandé sur i_am_jorf 2010-04-06 22:50:33

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 ou 14== 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
45
répondu Kimball Robinson 2014-01-02 17:54:46

={motion}

:h =

Vous ne devez pas utiliser vi Si vim est disponible.

5
répondu wRAR 2010-04-06 18:53:39

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

4
répondu Winder 2017-05-23 11:54:16