Par Emacs, comment joindre deux lignes en une seule?

Je suis nouveau sur Emacs. J'ai googlé cela mais pas de bonne réponse là-bas. L'un d'eux est Ctrl-n Ctrl-A Retour Arrière Cela fonctionne mais est stupide. Existe-t-il un moyen rapide et simple de joindre un bloc de lignes en une seule ligne?

En fait, je peux utiliser Esc-q pour remplir automatiquement un paragraphe maintenant, mais comment pourrais-je le faire revenir sans annuler?

45
demandé sur Alan 2009-07-02 09:30:47

12 réponses

Vous pouvez définir une nouvelle commande pour cela, en ajustant temporairement la largeur de remplissage avant d'utiliser la commande Esc-q:

;; -- define a new command to join multiple lines together --
(defun join-lines () (interactive)
 (setq fill-column 100000)
 (fill-paragraph nil)
 (setq fill-column 78)
)

Évidemment, cela ne fonctionne que si votre paragraphe a moins de 100000 caractères.

2
répondu Ralph 2009-07-02 06:14:07

Placez le point n'importe où sur le Dernière ligne du groupe de lignes qui doivent se joindre et appeler

M-^

À plusieurs reprises jusqu'à ce que toutes les lignes soient fusionnées.

Note: il laisse un espace entre toutes les lignes maintenant jointes.

171
répondu Ray Vega 2010-01-22 01:17:32

M-x join-line joindra deux lignes. Il suffit de le lier à une frappe pratique.

31
répondu pgs 2009-07-02 05:38:12

Remplacez simplement les nouvelles lignes par rien.

7
répondu Tal Pressman 2009-07-02 05:36:23

Plusieurs curseurs combinés avec M - ^ réduiront toutes les lignes sélectionnées en une seule avec tous les espaces blancs étrangers supprimés.

Par exemple, pour sélectionner un tampon entier, appelez le mode plusieurs curseurs, réduisez en une seule ligne, puis désactivez le mode plusieurs curseurs:

C-x h
M-x mc/edit-lines
M-^
C-g
6
répondu huntar 2014-03-22 23:45:10

J'aime la façon dont Sublime text Join line avec la commande J donc je le fais de cette façon:

(defun join-lines (arg)
  (interactive "p")
  (end-of-line)
  (delete-char 1)
  (delete-horizontal-space)
  (insert " "))
5
répondu Mark 2013-07-16 17:09:55

J'utilise la fonction suivante et la lie à 'M-J'.

(defun concat-lines ()
  (interactive)
  (next-line)
  (join-line)
  (delete-horizontal-space))

Si vous préférez garder la position de votre curseur, vous pouvez utiliser enregistrez-excursion.

3
répondu yuki morphs 2017-05-23 12:09:02

Le nom classique D'Emacs pour "join" est "fill". Oui, vous pouvez vous joindre à deux lignes avec M-^ - et c'est pratique-mais plus généralement vous vous voulez joindre les lignes n. Pour cela, consultez les commandes fill*, telles que fill-region, fill-paragraph, etc.

Voir ce pour plus d'info sur la sélection des choses qui peuvent ensuite être rempli.

3
répondu Micah Elliott 2017-08-14 05:16:32

"Comment pourrais-je le faire revenir sans annuler?":

(defun toggle-fill-paragraph ()
  ;; Based on http://xahlee.org/emacs/modernization_fill-paragraph.html
  "Fill or unfill the current paragraph, depending upon the current line length.
When there is a text selection, act on the region.
See `fill-paragraph' and `fill-region'."
  (interactive)
  ;; We set a property 'currently-filled-p on this command's symbol
  ;; (i.e. on 'toggle-fill-paragraph), thus avoiding the need to
  ;; create a variable for remembering the current fill state.
  (save-excursion
    (let* ((deactivate-mark nil)
           (line-length (- (line-end-position) (line-beginning-position)))
           (currently-filled (if (eq last-command this-command)
                                 (get this-command 'currently-filled-p)
                               (< line-length fill-column)))
           (fill-column (if currently-filled
                            most-positive-fixnum
                          fill-column)))
      (if (region-active-p)
          (fill-region (region-beginning) (region-end))
        (fill-paragraph))
      (put this-command 'currently-filled-p (not currently-filled)))))
(global-set-key (kbd "M-q") 'toggle-fill-paragraph)
0
répondu CodyChan 2015-01-19 09:06:30

À Partir De EmacsWiki: Décochant Paragraphe

 ;;; Stefan Monnier <foo at acm.org>. It is the opposite of fill-paragraph    
    (defun unfill-paragraph (&optional region)
      "Takes a multi-line paragraph and makes it into a single line of text."
      (interactive (progn (barf-if-buffer-read-only) '(t)))
      (let ((fill-column (point-max))
            ;; This would override `fill-column' if it's an integer.
            (emacs-lisp-docstring-fill-column t))
        (fill-paragraph nil region)))
0
répondu Marduk 2018-03-25 11:40:05

Le moyen le plus simple jamais:

  1. Sélectionnez paragraphe/lignes par M-h ou C-SPC
  2. Appuyez sur M-q
  3. assistez aux Emagics (magie Emacs)!!
0
répondu nishidh41 2018-04-11 15:41:09

Parce que join-line laissera un espace entre deux lignes, il ne supporte que la jointure de deux lignes. Dans le cas où vous voulez joindre beaucoup de lignes sans un espace laissé, vous pouvez utiliser le mode "recherche-remplacement" pour résoudre, comme suit:

  1. C-%
  2. requête: entrée C-q C-j Enter
  3. Remplacer: Enter
  4. Exécutez le remplacement. Enter

Fait.

0
répondu user5698801 2018-09-19 02:33:11