De temps en temps, je dois travailler avec du code qui n'est pas en retrait au niveau d'indentation dans lequel j'ai configuré Vim (4 espaces par niveau), généralement après avoir copié / collé quelque chose dans le fichier. Je me contente généralement de <<
et >>
. Le problème est qu'ils ne sautent pas au niveau de retrait suivant, ils ajoutent ou soustraient simplement 4 espaces.
Si j'ai un code comme celui-ci
if condition:
do this
do that
faire >>
le do that
entraînera
if condition:
do this
do that
Je veux que ça aille à ça
if condition:
do this
do that
En plus de correspondre facilement à l'indentation de la ligne ci-dessus, je veux qu'il passe au niveau d'indentation suivant, sans ajouter 4 espaces.
Voici ce que j'ai dans mon .vimrc concernant l'indentation
:set tabstop=4 shiftwidth=4 expandtab
>>
et <<
respectivement ajouter et supprimer le retrait qui n'est pas ce que vous voulez. Ce que vous voulez, c'est du "formatage", ce qui est fait avec ==
.
:nnoremap >> ^i<tab><esc>
si vous voulez vraiment le comportement des onglets>>
==
sautera au niveau de la ligne ci-dessus. Bien que ce soit une bonne chose à savoir, cela ne fonctionnerait pas dans tous les cas qui m'intéressent. En plus de la question, ce que je veux, c'est pour >>
et <<
mettre en retrait / déduire jusqu'au multiple suivant de la largeur de décalage de la frontière dans cette direction. .
==
utilise soit equalexpr
ou equalprg
pour reformater les lignes données.
filetype plugin indent on
dans votre.vimrc
, des règles liées à l'indentation de type de fichier (et plugin) s'appliqueront. C'est-à-dire vérifier quelle est réellement votretabstop
valeur ( fera; même pour les autres paramètres), lors de la modification, et modifiez ces valeurs en ajoutant votre ligne à un fichier 'après', quelque chose comme: stackoverflow.com/a/159066/5000478set tabstop?