Comment puis-je supprimer toutes les lignes d'un fichier à l'aide de vi?
À l'heure actuelle, je fais cela en utilisant quelque chose comme ça pour supprimer toutes les lignes d'un fichier:
echo > test.txt
Comment puis-je supprimer toutes les lignes à l'aide de vi
?
Remarque: Utiliser dd
n'est pas une bonne option. Il peut y avoir plusieurs lignes.
Dans vi
do
:1,$d
pour supprimer toutes les lignes.
Le :
introduit une commande (et déplace le curseur vers le bas).
Le 1,$
indique les lignes sur lesquelles la commande suivante (d
) doit fonctionner. Dans ce cas, la plage de la ligne un à la dernière ligne (indiquée par $
, vous n'avez donc pas besoin de connaître le nombre de lignes dans le document).
Le dernier d
signifie supprimer les lignes indiquées.
Il existe une forme plus courte (:%d
) mais je me retrouve à ne jamais l'utiliser. Le :1,$d
peut être plus facilement "adapté" par exemple :4,$-2d
ne laissant que les 3 premières et les 2 dernières lignes, supprimant le reste.
Dans vi j'utilise
:%d
où
:
indique à vi de passer en mode commande%
signifie toutes les lignesd
: supprimerSur la ligne de commande,
> test.txt
fera aussi.
Quel est le problème avec dd?
dd if=/dev/null of=test.txt
où
/dev/null
est un fichier spécial de 0 octetif
est le fichier d'entréeof
est le fichier de sortieJe vous recommande de le faire (devrait fonctionner dans n'importe quel shell compatible POSIX):
> test.txt
Si vous voulez vraiment le faire avec vi, vous pouvez faire:
Si votre curseur se trouve sur la première ligne (sinon, tapez: gg
ou 1G
), alors vous pouvez simplement utiliser dG
. Il supprimera toutes les lignes de la ligne actuelle jusqu'à la fin du fichier. Donc, pour vous assurer que vous supprimerez toutes les lignes du fichier, vous pouvez mélanger les deux ensemble, ce qui serait: ggdG
(en mode commande).
Ou %d
en mode Ex, exemple de ligne de commande: vim +%d foo.bar
.
Connexes: Comment puis-je supprimer dans VIM tout le texte de la ligne actuelle à la fin du fichier?
Je suis un mec paresseux et j'aime rester simple. ggdG
est composé de cinq touches, dont Shift
gg
va à la première ligne du fichier, d
est le début du verbe d
elete et G
est le mouvement pour aller au bas du fichier. En clair, c'est aller au début du fichier et tout supprimer jusqu'à la fin de la tuile.
Allez au début du fichier et appuyez sur dG.
J'utilise toujours ggVG
gg
saute au début du fichier d'édition en coursV
(v en majuscule) sélectionnera la ligne courante. Dans ce cas, la première ligne du fichier d'édition en coursG
(g en majuscule) sautera à la fin du fichier. Dans ce cas, puisque j'ai sélectionné la première ligne, G
sélectionnera tout le texte de ce fichier.Ensuite, vous pouvez simplement appuyer sur d
ou x
pour supprimer toutes les lignes.
Une autre solution:
truncate -s 0 file
notez que dans votre question, echo > test.txt
crée un fichier avec un seul saut de ligne, pas un fichier vide.
À partir du shell, envisagez d'utiliser echo -n > test.txt
ou : > test.txt
.
Bien que j'utilise généralement une commande d'édition vi (j'utilise ggdG
), vous pouvez également appeler le shell avec une référence au fichier actuel comme suit:
:!:>%
C'est presque aussi concis que ggdG
, mais plus difficile à taper, et vous devez également confirmer que vous souhaitez recharger le fichier modifié, donc je ne le recommande pas particulièrement dans ce cas, mais sachant comment utiliser Shell les commandes de vi comme celle-ci sont utiles.
le décomposer:
:
lancer une commande vi!
lancer une commande Shell:
ceci est une commande intégrée de Shell avec une sortie vide>
redirige la sortie%
vi le remplace par le nom du fichier courantLe :1,$d
est aussi un bon bien sûr, et juste pendant que j'y suis, il y a aussi 1GdG
Tapez :
et %d
(Pas en mode insertion. Si c'est le cas, appuyez d'abord sur Échap.)