web-dev-qa-db-fra.com

Par Emacs, comment joindre deux lignes en une?

Je suis nouveau à Emacs. J'ai googlé ceci mais pas de bonne réponse là. L'un d'eux est Ctrl-n Ctrl-a Backspace Cela fonctionne mais est stupide. Existe-t-il un moyen simple et rapide 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 puis-je le faire revenir sans UNDO?

45
jcadam

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 compte moins de 100 000 caractères.

3
Ralph

Placez un point n’importe où sur la ligne last du groupe de lignes à joindre et à appeler 

M-^

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

Remarque: Cela laisse un espace entre toutes les lignes maintenant jointes.

174
Ray Vega

M-x join-line va joindre deux lignes. Liez-le simplement à une frappe pratique.

32
pgs

Il suffit de remplacer les nouvelles lignes par rien.

7
Tal Pressman

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

Par exemple, pour sélectionner un tampon entier, appeler le mode de plusieurs curseurs, réduire en une seule ligne, puis désactiver le mode de plusieurs curseurs:

C-x h
M-x mc/edit-lines
M-^
C-g
6
huntar

J'aime la façon dont Sublime text Join ligne avec Command J alors je le fais de cette façon:

(defun join-lines (arg)
  (interactive "p")
  (end-of-line)
  (delete-char 1)
  (delete-horizontal-space)
  (insert " "))
5
Mark

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 conserver la position du curseur, vous pouvez utiliser save-excursion .

3
yuki morphs

Le nom classique d'Emacs pour "rejoindre" est "remplir". Oui, vous pouvez joindre deux lignes avec M-^ - ce qui est pratique - mais plus généralement, vous voudrez Joindre des lignes n. Pour cela, voir les commandes fill*, telles que fill-region, fill-paragraph, etc.

Voir this pour plus d’informations Sur la sélection de tâches pouvant être remplies.

3
Micah Elliott

"comment pourrais-je le faire revenir sans UNDO?":

(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
CodyChan

De EmacsWiki: Remplir le 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
Marduk

Comme join-line laissera un espace entre deux lignes, il ne prend également en charge que la jonction de deux lignes. Si vous souhaitez joindre beaucoup de lignes sans laisser d'espace, vous pouvez utiliser le mode "recherche-remplacement" pour résoudre, comme suit:

  1. C-%
  2. Requête: input C-q C-jEnter
  3. Remplacer: Enter
  4. Exécutez le remplacement. Enter 

Terminé.

0
user5698801