83 votes

Éditer plusieurs lignes à la fois dans Emacs

Je crois TextMate a un mode où si vous commencez à taper, la même chose sera saisie sur toutes les lignes que vous avez sélectionnées. Existe-t-il quelque chose de similaire dans Emacs ?

Je suppose que les rectangles peuvent m'aider d'une manière ou d'une autre, mais je ne sais pas comment...

0 votes

0 votes

Si vous relisez le notes d'aide pour cela vous verrez que, depuis qu'il a été posté à l'origine, il a été remplacé par multiple-cursors.el

0 votes

Oui, @phils, multiple-cursors.el est génial.

109voto

allyourcode Points 5670

C'est aussi simple que ça : C-x r t

Quelques exemples sont ici : http://ergoemacs.org/emacs/emacs_string-rectangle_ascii-art.html

9 votes

C'est génial mais pas très utile pour quelqu'un de complètement nouveau à emacs, pouvez-vous m'aider à déchiffrer ceci s'il vous plaît ?

3 votes

@cone Vous devriez lire le tutoriel intégré d'emacs. Il explique comment lire les hiéroglyphes ;). Pour afficher le tutoriel dans emacs, tapez 'h' tout en maintenant la touche ctrl enfoncée. Ensuite, tapez 't' (pour 'tutorial').

1 votes

J'ai C-x mappé à couper (cua-mode), donc ce n'est pas une bonne idée.

58voto

nic ferrier Points 663

Vous devez absolument essayer d'installer curseurs multiples .

C'est dans Marmelade y MELPA alors faites-le :

M-x package-install multiple-cursors

1 votes

C'est une bonne solution. Très facile à utiliser. Pour ajouter la sélection multiple à partir d'un clic (la norme pour de nombreuses personnes dont moi), ajoutez (global-unset-key (kbd "M-<down-mouse-1>")) (global-set-key (kbd "M-<mouse-1>") 'mc/add-cursor-on-click) à votre configuration.

0 votes

Ici, en 2021, c'est la solution que la plupart des gens attendent, je pense.

0 votes

Il est même intégré à swiper, avec 'C-7' comme combinaison de touches par défaut. xenodium.com/emacs-swiper-et-multiples-curseurs

23voto

boskom Points 595

L'une des solutions consiste à utiliser le mode CUA. Activez le mode cua avec M-x cua-mode , sélectionner le rectangle de départ : première pression C-Enter puis déplacez le curseur à l'aide des commandes de déplacement standard pour effectuer une sélection. En appuyant sur la touche Entrée à tout moment, le curseur passe d'un coin à l'autre du rectangle, ce qui vous permet d'ajouter ou de supprimer du texte dans la sélection.

0 votes

Merci, boskom. J'utilise la version 21.3.1, donc ce mode ne semble pas être installé. Je ne l'installerai probablement pas, car je trouve que j'aime bien C-x r t.

1 votes

Merci ! je pensais que le mode cua était pour les personnes qui ne voulaient pas apprendre les liaisons copier/coller emacs :P C'est génial !

2 votes

Si vous utilisez cua-selection-mode au lieu de cua-mode vous n'obtiendrez pas les liaisons indésirables couper/copier/coller. Vous sera obtiennent d'autres fonctionnalités que vous pourriez ne pas vouloir, cependant (plus particulièrement, les commandes d'édition remplaçant la région).

22voto

Hamster Points 114

Pour ceux d'entre vous qui veulent faire cela pour des scénarios plus compliqués et qui veulent le faire sans installer un nouveau module, veuillez lire la suite. (Ceci est possible dans Emacs sans installer MarkMultiple, bien que j'utilise et aime personnellement MarkMultiple).

J'ai récemment dû sortie une requête SQL dans un fichier, puis la formater en une requête 'MYSQL INSERT'. Voici comment Emacs m'a rendu la vie facile....

Le fichier ressemble à :

1   I am a random text
2    I am not
3    G, you've gone mad
4    Click on this link
5   Transfer in progress (we've started the transfer process)
6    But transfer happened yesterday
7    No you are
8    Oh please! This is getting too much!
9    I love Emacs
10    I can't be bothered with    this any more
11    it's time to raise the bar
12    show me    how to expand my territory

Et je veux que ça ait l'air :

(1,   ,'I am a random text'),
(2,   ,'I am not'),
(3,   ,'G, youve gone mad'),
(4,   ,'Click on this link'),
(5,   ,'Transfer in progress (weve started the transfer process)'),
(6,   ,'But transfer happened yesterday'),
(7,   ,'No you are'),
(8,   ,'Oh please! this is getting too much!'),
(9,   ,'I love Emacs'),
(10,  ,'I cant be bothered with this any more'),
(11,  ,'its time to raise the bar'),
(12,  ,'show me how to expand my territory'),
  1. Placez le curseur à la première ligne
  2. Appuyez sur C-x ( pour commencer l'enregistrement d'une macro (à ce stade, toutes vos entrées de touche sont enregistrées). veuillez donc suivre attentivement les instructions)
  3. Appuyez sur C-a pour aller au début de la ligne
  4. Tapez "(" suivi de M-f pour avancer d'un mot, puis tapez ",".
  5. C-n pour passer à la ligne suivante, suivi de C-x ) pour terminer la macro
  6. C-u 11 C-x e répéter la macro n (11 dans ce cas) fois

Eurêka ! Si vous n'avez pas encore échoué, vous obtiendrez quelque chose qui ressemble à ceci :

(1,   I am a random text
(2,   I am not
(3,   G, youve gone mad
(4,   Click on this link
(5,   Transfer in progress (weve started the transfer process)
(6,   But transfer happened yesterday
(7,   No you are
(8,   Oh please! this is getting too much!
(9,   I love Emacs
(10,  I cant be bothered with this any more
(11,  its time to raise the bar
(12,  show me how to expand my territory

A ce stade, je vais vous laisser découvrir le reste. Mais, avant de partir, je tiens à préciser qu'il existe plusieurs façons de réaliser ce genre de choses. Cette méthode est l'une d'entre elles et c'est celle que je préfère.

0 votes

F3 lance également l'enregistrement des macros (au moins dans mon emacs, par défaut) et F4 arrête l'enregistrement. Les frappes suivantes sur F4 lire la macro. C'est beaucoup plus facile à retenir que C-x ( etc.

0 votes

Comment les guillemets simples ont-ils disparu par cette procédure et donné lieu au texte dégénéré ? Au moins, la question de l'échappement des guillemets simples dans la sortie devrait être abordée dans la section un peu de mode dans cette réponse.

21voto

paweloque Points 4467

Vous pouvez utiliser les commandes (et les touches) suivantes pour y parvenir :

  • rectangle ouvert (C-x, r, o) ajouter des espaces
  • tuer-rectangle (C-x, r, k) supprimer
  • clear-rectangle (C-x, r, c) remplacer par des espaces
  • M-x string-insert-rectangle remplir avec le texte spécifié

Voici une description complète de ces caractéristiques : http://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X