2009-07-02 14 views
39

Soy nuevo en Emacs. He buscado en Google esto pero no hay una buena respuesta allí. Uno de ellos es Ctrl-n Ctrl-a Retroceso Esto funciona pero es estúpido. ¿Hay una manera rápida y simple de unir un bloque de líneas en una sola línea?Por Emacs, ¿cómo unir dos líneas en una sola?

En realidad, puedo usar Esc-q para autocompletar un párrafo ahora, pero ¿cómo podría conseguir que se revierte sin DESHACER?

+1

Gracias, por la idea, lo vincularé a . – Ralph

+0

El comando "deshacer" generalmente está vinculado a C-_ (control-guión bajo) ... – dmckee

+2

Normalmente lo hago C-e C-d – sharjeel

Respuesta

3

se podría definir un nuevo comando para esto, una adaptación provisional de la anchura de llenado antes de utilizar el comando de la 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) 
) 

Obviamente esto sólo funciona, si su párrafo tiene menos de 100000 caracteres.

+9

clobbering rellenar la columna, que sería (defun unirse a las líneas() (interactiva) (let ((fill-column 999999)) (fill-paragraph nil))) – huaiyuan

+0

Sí. Esto debería ser más elegante. – jcadam

+0

¿Qué tal esto? (defun unfill-párrafo() "hace lo contrario de relleno apartado" (interactiva) (let ((fill-column (point-max))) (fill-paragraph nil))) – Gyom

6

Simplemente reemplace las nuevas líneas con nada.

27

M-x join-line unirá dos líneas. Solo agréguela a una cómoda pulsación de tecla.

+0

Sí. Funciona. Sin embargo, no sirve de nada un bloque de varias líneas (3 líneas o más). ¿Algún comando útil para este propósito? – jcadam

+8

Pero si va a la última línea del bloque y pulsa M-^(la combinación de teclas para la línea de unión) varias veces, tendrá el mismo efecto. Va bastante rápido, así que a menos que tengas cientos de líneas para unirme, preferiría que fuera el relleno de la columna de relleno. De lo contrario, haga lo que Tal sugiere, marque el bloque y reemplace la nueva línea (C-Q C-J) sin nada. – danielpoe

+0

He intentado vincular join-line a M-1. Funciona bien también Como sugirió, hay muchas soluciones aquí para este propósito, así que intentaré usarlas todas de manera flexible. ¡Muchas gracias! – jcadam

158

Lugar punto en cualquier lugar de la última línea del grupo de líneas que necesitan unirse y llamar a

M-^ 

varias veces hasta que se fusionan todas las líneas.

Nota: Deja un espacio entre todas las líneas unidas ahora.

+0

¿A qué está M-^generalmente vinculado? – stsquad

+0

stsquad: necesitas presionar Meta + Shift + 6 (Shift + 6 te dará ^) –

+0

Ah, las alegrías de mejorar día a día mi Emacsfu. Solo puede hacer que me pregunte si tengo diferentes funciones de líneas de unión: una con un espacio extra y otra sin ella. –

4

Me gusta la forma de texto Sublime línea de unión con el Comando J así que hacerlo de esta manera:

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

Multiple Cursors combinado con M-^colapsará todas las líneas seleccionadas en uno con todos los espacios en blanco extrañas eliminado.

Por ejemplo, para seleccionar un búfer entero, invocar el modo de múltiples cursores, colapsará en una línea, y luego desactivar múltiples modo de cursores:

C-x h 
M-x mc/edit-lines 
M-^ 
C-g 
+0

Mi amor por múltiples cursores crece. – Bae

0

"¿cómo podría conseguirlo para volver sin DESHACER?":

(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) 
3

Utilizo la siguiente función y la ato a 'M-J'.

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

Si prefiere mantener su posición del cursor, puede utilizar save-excursion.

2

El nombre convencional de Emacs para "join" es "fill". Sí, puede unirse a dos líneas con M-^ - y eso es práctico - pero más generalmente usted quiere unir líneas n. Para ello, consulte los comandos fill*, como fill-region, fill-paragraph, etc.

Ver this para obtener más información sobre la selección de cosas que luego pueden ser llenados.

+0

Votaría esto como la respuesta idiomáticamente correcta – JohnDoe

Cuestiones relacionadas