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?
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.
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.
M-x join-line
va joindre deux lignes. Liez-le simplement à une frappe pratique.
Il suffit de remplacer les nouvelles lignes par rien.
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
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 " "))
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 .
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.
"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)
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)))
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:
C-%
C-q C-j
Enter
Enter
Enter
Terminé.