Comment supprimer les n premiers caractères de chaque ligne?


Réponses:


28

C'est encore plus simple! Encore une fois, utilisez des commandes rectangulaires . Déplacez-vous dans un coin du rectangle que vous souhaitez supprimer, appuyez sur C-SPCpour définir la marque. Passez à l'autre coin du rectangle et appuyez sur C-x r d( delete-rectangle). Par exemple, passez à la première ligne sur laquelle vous souhaitez agir, appuyez sur C-aou homepour aller au début de la ligne, descendez jusqu'à la dernière ligne sur laquelle vous souhaitez agir, pour vous déplacer dans le coin inférieur droit, puis supprimez.C-u number C-fC-x r d

Si la dernière ligne contient moins que le nombre de caractères souhaité, il peut être plus pratique d'utiliser à la place les coins inférieur gauche et supérieur droit. Alternativement, vous pouvez insérer des caractères indésirables (cela est utile si la première ligne et la dernière ligne sont plus courtes).

Vous pouvez utiliser C-x r kpour tuer le rectangle, ce qui vous permet de le tirer ( C-x r y) plus tard (déplacez-vous dans le coin supérieur gauche de l'endroit où vous souhaitez l'insérer).

Vous pouvez également utiliser C-x r t( string-rectangle) et saisir une chaîne vide.

Les commandes rectangulaires sont basées sur les positions des colonnes. Si vous souhaitez supprimer n caractères, plutôt que n colonnes (ce qui fait la différence avec les caractères multi-colonnes tels que les tabulations), vous pouvez utiliser le remplacement d'expressions régulières : remplacez ^.\{42\}par rien pour supprimer les 42 premiers caractères de chaque ligne.


3
au lieu d'essayer de mémoriser toutes les commandes de rectangle, vous pouvez également utiliser Cx spc, au lieu de C-spc, qui transforme votre région en rectangle et tout fonctionne.
Malabarba

1
@Malabarba Seulement depuis Emacs 24 cependant. (Écrire ceci sur une machine avec Emacs 23. Ils sont toujours très présents.)
Gilles 'SO- arrête d'être méchant'

2
Mes condoléances ... :-(
Malabarba

Cela vient de fonctionner pour moi sur GNU Emacs 23.4.1 (x86_64-pc-linux-gnu, GTK + Version 2.24.21) du 2013-10-25 sur allspice, modifié par Debian
davidrmcharles

4

Autre possibilité: j'aime vraiment utiliser plusieurs curseurs pour des tâches comme celle-ci. Disponible en package.elvia MELPA, il est devenu un élément indispensable de mes emacs. Je voudrais simplement sélectionner I said(et éventuellement inclure le saut de ligne avant), utiliser M-x mc/mark-all-like-thiset être en route. Si vous souhaitez un contrôle plus fin, vous pouvez utiliser mc/mark-next-like-thisou mc/mark-next-lines.

Mes raccourcis clavier:

(use-package multiple-cursors
  :bind (("C->"   . mc/mark-next-like-this)
         ("C-M->" . mc/mark-all-like-this-dwim)))

Les Roches Emacs obligatoires! épisode: http://emacsrocks.com/e13.html


3

Si vous l'avez cua-modeactivé, alors:

  • C-a passer au début de la ligne,
  • C-RET pour commencer le rectangle,
  • Ensuite, déplacez-vous avec les touches fléchées ou toute commande de déplacement emacs comme C-f
  • DEL pour supprimer la sélection

Je préfère la cua-modefaçon de travailler, par rapport au rectangle standard Emacs où l'équivalent serait:

  • C-a passer au début de la ligne,
  • C-SPC pour commencer le rectangle,
  • Ensuite, déplacez-vous avec les touches fléchées ou toute commande de déplacement emacs comme C-f
  • C-x r d pour supprimer la sélection

Le cua-modeenregistre trois pressions de touche par rapport au rectangle Emacs standard.


3

Par souci d'exhaustivité: la suppression des 3 premiers caractères de chaque ligne (formellement: à partir du point ou dans la région) peut être effectuée en remplaçant regexp ^...(ou plus généralement:) ^.\{3\}par une chaîne vide.

Explication: dans regexen, ^signifie "début de ligne", .signifie "n'importe quel caractère" et \{n\}signifie " n répétitions de la chose précédente".

Cela a un avantage supplémentaire d'être interactif (sauf si l'on appuie !, ce qui fait query-regexp-replacetout remplacer désormais sans plus de questions).


1
Pourquoi les downvotes?
mbork

0

Et encore une possibilité:

F3C-aC-3C-dC-nF4

enregistre une macro de clavier, disant en gros "passer au début de la ligne, supprimer trois caractères et passer à la ligne suivante". Ensuite, vous pouvez le rejouer jusqu'à la fin du tampon par C-uF4, ou l' C-xC-krappliquer aux lignes de la région. Cela a un inconvénient: il se cassera lorsqu'une ligne contient moins de 3 caractères.


-1

S'il ne s'agit que d'une ligne, vous pouvez zapper sur char avec Mz en supposant que ce caractère n'est pas répété entre le point et celui que vous souhaitez supprimer. Dans certains cas, cela est plus rapide que la création d'une région.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.