2009-05-10 8 views
3

Existe-t-il un moyen d'avoir des opérateurs suspendus lors de l'indentation avec des onglets dans Vim? Par exemple, si j'ai le code:Opérateurs suspendus dans Vim

class some_class 
{ 
<tab>some_class(); 
<tab>~some_class(); 
}; 

Je veux qu'il ressemble à ceci:

class some_class 
{ 
     some_class(); 
     ~some_class(); 
}; 

La question est sur l'apparence d'espaces, et non sa composition. Donc, les abréviations et les règles d'indentation ne le feraient pas.

Répondre

3

Je pense qu'il demande si le ~ se déplacera vers l'arrière un espace si vim peut détecter que c'est un opérateur, de ce fait "accrocher" le ~ à gauche du some_class(). La réponse, pour autant que je sache, est peut-être possible, mais ne sera pas facile. Les abréviations en mode d'insertion sont toujours inégales, et les solutions plus complexes sont ... bien plus complexes.

À moins que vous n'ayez vraiment besoin de ce comportement, je ne pense pas que cela en vaille la peine.

EDIT:

Je pense que je reçois ce que vous dites. Dans ce cas, je peux dire avec une certitude raisonnable que ce que vous demandez n'est pas possible. Vous ne pouvez pas modifier la façon dont vim affiche le texte indenté par les onglets et commence à partir d'un opérateur que vous souhaitez suspendre dans la marge de gauche. Cela ne fonctionnera tout simplement pas. Vim est configuré pour afficher le texte tel quel, vous ne pouvez pas le modifier pour l'adapter à un style typographique sans modifier le code source, ce que je doute que vous souhaitiez faire.

+0

Juste pour réitérer, la question concerne l'indentation avec des tabulations, pas des espaces. De plus, les abréviations ne peuvent pas conditionner les espaces. –

+0

Je pense que je comprends un peu mieux, je vais mettre à jour ma réponse. – sykora

+0

Eh bien. Il y a 'tabstop'. Mais, je soupçonne fortement que vous avez raison. –

0

Je ne suis pas sûr de comprendre le concept de «opérateur de suspension» mais il semble que vous souhaitiez remplacer vos onglets par des espaces.

Vous pouvez définir les options de expandtab et tabstop:

:set expandtab 
:set tabstop=8 

qui élargiront de nouveaux caractères de tabulation que vous tapez dans 8 espaces.

Pour appliquer l'onglet expansion aux onglets existants dans votre fichier, utilisez la commande retab:

:retab 
+0

Non, je ne veux pas remplacer les tabulations par des espaces. Au contraire, je veux une meilleure représentation visuelle des onglets. Il existe de nombreux cas où cela rendrait le code plus lisible. Le terme vient de la typographie: http://en.wikipedia.org/wiki/Hanging_punctuation –

0

Il semble que vous deviez écrire votre propre fichier de retrait pour cela, dont des exemples sont dans $VIMRUNTIME/indent. Mais comme dit Sykora, cela ne vaut probablement pas la peine.

+0

Si je comprends bien, les règles d'indentation déterminent les caractères à utiliser pour l'indentation, mais n'ont rien à voir avec leur apparence. –

+0

C'est correct. J'ai soit manqué votre remarque à propos de vouloir simplement que le texte apparaisse en retrait, soit il n'était pas là quand j'ai répondu. –

0

Je pense que ce que vous voulez est appelé "autoindent". Voir: help ai

'autoindent' 'ai' boolean (default off) 
      local to buffer 
    Copy indent from current line when starting a new line (typing <CR> 
    in Insert mode or when using the "o" or "O" command). If you do not 
    type anything on the new line except <BS> or CTRL-D and then type 
    <Esc>, CTRL-O or <CR>, the indent is deleted again. Moving the cursor 
    to another line has the same effect, unless the 'I' flag is included 
    in 'cpoptions'. 
    When autoindent is on, formatting (with the "gq" command or when you 
    reach 'textwidth' in Insert mode) uses the indentation of the first 
    line. 
    When 'smartindent' or 'cindent' is on the indent is changed in 
    a different way. 
    The 'autoindent' option is reset when the 'paste' option is set. 
    {small difference from Vi: After the indent is deleted when typing 
    <Esc> or <CR>, the cursor position when moving up or down is after the 
    deleted indent; Vi puts the cursor somewhere in the deleted indent}. 
+0

Ce que je demande a plus à faire avec des choses comme 'tabstop', qui affectent l'apparence de l'indentation. –