2010-09-12 3 views
4

Lorsque je frappe C-k, Emacs tue en fin de ligne. Quand je frappe de nouveau C-k, il "tue la nouvelle ligne" et amène la ligne suivante. Cependant, l'indentation de la ligne suivante reste intacte, et vous pouvez vous retrouver avec une ligne qui a beaucoup d'espaces au milieu.Obtenir Emacs pour joindre des lignes lors de la mise à mort des lignes

Ainsi, de:

previous line material 
    next line material 

à ceci:

previous line material  next line material 

Je comprends que je peux utiliser M-^pour joindre les lignes correctement, mais qui exige que le curseur soit sur la ligne suivante . Comment puis-je modifier C-k de sorte que quand il tue la nouvelle ligne, tue aussi l'indentation de la ligne suivante?

+0

Vous devriez demander aux gentils gars de superuser.com. – zneak

Répondre

4

Pour C-k Je ne sais pas, mais vous pouvez utiliser la fonction just-one-space pour transformer un nombre quelconque d'espace en juste un espace (il est lié sur M-space)

+0

En fait, j'aime les réponses de Sean et Remi, mais j'ai trouvé M-space un peu plus facile à utiliser pour moi. Merci :) – qrest

0

Cela fera:

(defun my-kill-line (&optional arg) 
    (interactive "P") 
    (if arg 
     (kill-line arg) 
    (when (prog1 (eolp) (kill-line)) 
     (just-one-space 1)))) 
4

Si vous donnez M-^ un argument (par exemple Cu M-^), il va rejoindre la ligne suivante à la ligne en cours.

1

Voici un moyen de brancher le comportement (je pense) que vous voulez dans kill-line: lorsque vous tuez une nouvelle ligne, tuez également l'indentation qui suit. Notez que cela peut entraîner l'absence d'espace après le curseur, c'est pourquoi je pense que j'irais avec M-1 M-^ ou C-k M-SPC à la place.

(defadvice kill-line (around kill-indentation 
         activate compile) 
    "When killing a line break, also kill any subsequent indentation." 
    (let ((f-v-l (symbol-function 'forward-visible-line))) 
    (flet ((forward-visible-line (arg) 
      (funcall f-v-l arg) 
      (skip-chars-forward " \t"))) 
     ad-do-it))) 
0

J'ai dans mes .emacs:

(defun pull-line() 
    "Pull the next line that contains anything up to the end of this one" 
    (interactive) 
    (save-excursion 
    (end-of-line) 
    (while (looking-at "[ \n\r\t]") 
     (delete-char 1)) 
    (if (looking-back "^[[:blank:]]*[[:punct:][:alnum:]].*") 
(fixup-whitespace) 
     (indent-according-to-mode)))) 
(global-set-key "\C-cp" 'pull-line) 

Il tire la ligne suivante non vide jusqu'à l'this un, et s'il y a quelque chose sur this ligne, il fait des appels (fixup-whitespace) qui ne la bonne chose à propos de 95% du temps, sinon il indente à ce que pense emacs est le bon niveau. Je pense que j'ai copié le concept de vim?

Je l'utilise tout le temps, de toute façon.

0

Je viens de réaliser que je l'ai aussi dans mes .emacs, c'est plus exactement ce que vous voulez, bien que j'oublie que je l'ai depuis que j'utilise pull-line beaucoup plus souvent. Je pense que je l'ai volé d'emacswiki:

(defun kill-and-join-forward (&optional arg) 
    "If at end of line, join with following; otherwise kill line. 
Deletes whitespace at join." 
    (interactive "P") 
    (if (and (eolp) (not (bolp))) 
     (progn 
    (delete-indentation t) 
    (if (looking-at " $") 
     (delete-char 1))) 
    (kill-line arg))) 
(global-set-key "\C-k" 'kill-and-join-forward) 
Questions connexes