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
indentation
Dumitru
la source
la source
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?
>>
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 soitequalexpr
ouequalprg
pour reformater les lignes données.Réponses:
Lorsque vous utilisez l' une des commandes
{count}>>
,{count}<<
,>{motion}
ou<{motion}
, sur certaines lignes qui ont déjà été en retrait, et vous voulez leur niveau d'indentation être un multiple de votre'shiftwidth'
valeur d'option, vous pouvez activer l''shiftround'
option et ajoutez cette ligne dans votrevimrc
:la source
Si vous souhaitez toujours
>>
mettre en retrait le tabstop suivant et<<
le supprimer jusqu'au dernier tabstop, vous pouvez les lier comme suit:Cela déplacera le curseur, mais vous pourriez probablement faire quelques repères pour le déplacer en arrière.
^
ne laisse pas dem'
marque, mais vous pouvez en laisser une manuellement dans la reliure.la source