En supposant que j'ai une ligne dans un fichier avec XXXX
un espace réservé que j'ai sélectionné via v
comme suit:
XXXX Some other text
Comment puis-je changer uniquement le XXXX
avec la sortie d'une commande externe, comme date +%Y%m%d
?
Je suis allé aussi loin que
:'<,'>!date +\%Y\%m\%d
mais cela a remplacé toute la ligne.
external-command
replace
muk.li
la source
la source
Réponses:
Vous pouvez supprimer le texte et insérer la sortie d'une commande en utilisant CtrlR- =:
Pour l'expression, vous pouvez utiliser la
system()
fonction pour exécuter des commandes externes.Après avoir sélectionné le texte, appuyez sur
c
, puis<c-r>=
et utilisezsystem('date +%Y%m%d')
comme expression.la source
date
. Si vous essayez quelque chose commesystem('printf %s foo')
, qui ne produit pas de nouvelle ligne de fin, vous verrez qu'il y a une différence.strftime
fonction que vous pouvez utiliser à la placesystem('date …')
. La chaîne de format est la même."=system('date +%Y%m%d')p
la sélection visuelle à la place.Si vous placez le curseur sur une telle ligne, vous pouvez:
0
pour placer le curseur dans la première colonne.f
Space pour placer le curseur dans le premier blanc.i
Enter Esc pour diviser la ligne.l
pour déplacer le curseur d'une ligne vers le haut.:.!date +\%Y\%m\%d
pour exécuter la commande.J
pour rejoindre les lignes à nouveau.De
:h :visual_example
:Voir aussi
:h visual-operators
pour plus de détails.De ce commentaire: Vous pouvez également essayer le plugin vis ou NrrwRgn . Les deux devraient le gérer très bien. (Merci @ christian-brabandt pour l'astuce).
la source
Créez un mappage temporaire pour ces remplacements. Par exemple:
Ensuite, en mode visuel, vous pouvez sélectionner du texte, taper
qq
et il sera remplacé par la sortie de la commande. Dans cet exemplewc -c
, traitera votre sélection, qui est le@"
paramètre.perl -pe chomp
est nécessaire pour supprimer une nouvelle ligne de fin de la sortie.la source
Essaye ça:
date
commande dans le registre a, avec la nouvelle ligne de fin supprimée.XXXX
(g/XXXX/
), etXXXX
par le contenu du registre a (s/XXXX/\=@a/g
)Voir
:h let-@
et:h :global
ainsi que la section "Sous-liste" dans:h list-index
la source
Plugin: Visual Block Commands (vis) par DrChip
Installation
vis.vba.gz
et dépendancececutil.vba.gz
dans vim8 packpathL'exemple OP devient
la source