J'ai des codes copiés à partir d'Internet qui ont une indentation de 2 espaces et je veux les changer en indentation de 4 espaces. Je me demande s'il existe une courte routine vim pour accomplir la tâche sans avoir à écrire de script vim? Voici comment je le fais actuellement avec un fichier HTML:
- Enregistrer une macro
- Aller au début d'une ligne
- Sélection visuelle de tous les espaces jusqu'à la première occurrence de "<"
- Tirez et collez tous les espaces (essentiellement pour les doubler)
- Relire la macro jusqu'à la fin du fichier
En bref qa0vt<yp<esc>jq
Pièges:
La macro échoue pour une ligne vide ou une ligne qui ne commence pas par "<". Et je ne sais pas comment étendre cette solution à un fichier non HTML.
ts
: =tabstop
,sts
: =softtabstop
et[no]et
: =[no]expandtab
.retab
l'argumentation serait-elle utile, et pourquoi ne pouvons-nous pas l'utiliser pour cette tâche?:set sts=2 noet
et:retab! 2
donc ce serait un peu plus court (bien que peut-être moins lisible) de cette façon.:set ts=2 sts=2 noet | retab! | set ts=4 sts=4 et | retab!
puis utilisez@:
dans différents fichiers pour appliquer rapidement la même action.Cela peut être possible avec
:set shiftwidth=4
etgg=G
.la source
gg=G
dire exatly? Je comprends que celagg
signifie «passer à 1,1» etG
«passer à la dernière ligne».=
fait l'indentation, donc cela signifie simplement l'indentation du début à la fin du texte%retab
, qui convertissait de manière incorrecte les espaces incorporés dans des chaînes littérales.Ce que je fais est très similaire aux approches d'esneider et de cforbish, mais un peu plus rapide à taper:
Remplace simplement l'espace de début (espaces ou tabulations) par deux fois plus d'espace de début (
&
est remplacé par l'expression correspondante).la source
%
.sed
et l'appliquer à tous les fichiers d'un répertoire superuser.com/a/159286/41494C'est une question très ancienne, mais toutes les réponses sont ... fausses ... Vim a un moyen très simple de réindenter le fichier entier. J'ai appris cela après avoir écrit ma propre fonction pour le faire, donc je suis dans le même bateau de l'ignorance;)
type
cela suppose que vous avez votre tabstop réglé sur ce que vous aimez, (donc pour l'OP, ce serait ts = 4)
J'ai appris cela sur http://vim.wikia.com/wiki/Fix_indentation , qui mentionne
la source
J'ai utilisé cette expression régulière (elle double le nombre d'espaces de début):
la source
%s/\s\+/&&/
la même chose? Btw, je pense que leg
drapeau est inutile (pour un, il n'y aurait qu'un seul match avec^pattern
dans chaque ligne, non?)%s/^\s\+/&&/g
est plus proche.Similaire (mais un peu plus simple) à la réponse de cforbish, cette regex dupliquera les espaces de début
Ou vous pouvez utiliser cette autre expression régulière pour transformer 2 espaces en 4 espaces, en préservant les espaces simples (et les quantités impaires en général)
C'est,
la source
Ceci est une variante des réponses basées sur les regex.
J'ai un script bash dans mon répertoire bin local qui doublera la quantité d'espaces blancs au début d'une ligne. L'entrée peut être stdin ou un fichier:
J'utilise ceci dans vim en sélectionnant visuellement une ligne et en émettant la commande suivante:
Cela m'évite d'avoir à taper (ou à me souvenir) de l'expression régulière.
Je l'utilise également dans des cartes comme les suivantes:
qui l'appliquera à un bloc de texte récemment collé. J'utilise généralement la carte suivante pour coller plutôt que
:set paste
Mon flux de travail habituel est:
ou simplement changer le retrait sur les blocs copiés collés à partir d'un autre tampon.
la source
En plus de la réponse de @ spro, je mets ceci dans mon
.vimrc
Tapez simplement
:Format
.Avec la sélection visuelle, cela ne formate que les lignes sélectionnées.
Sans sélection visuelle, cela formate le fichier entier.
la source