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?
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.
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.
M-x join-line
joindra deux lignes. Il suffit de le lier à une frappe pratique.
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
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 " "))
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.
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.
"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)
À 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)))
Le moyen le plus simple jamais:
- Sélectionnez paragraphe/lignes par
M-h
ouC-SPC
- Appuyez sur
M-q
- assistez aux Emagics (magie Emacs)!!
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:
C-%
- requête: entrée
C-q C-j
Enter
- Remplacer:
Enter
- Exécutez le remplacement.
Enter
Fait.