杀死行时让Emacs加入行

时间:2010-09-12 17:25:46

标签: emacs

当我点击C-k时,Emacs会杀到最后一行。当我再次击中C-k时,它“杀死换行符”并带来下一行。但是,下一行的缩进保持不变,最后你可以得到一条中间有很多空格的行。

所以,从这个:

    previous line material
    next line material

到此:

    previous line material        next line material

我知道我可以使用M- ^正确连接线,但这需要光标位于下一行。如何修改C-k,以便在杀死换行符时也杀死下一行的缩进?

6 个答案:

答案 0 :(得分:4)

对于C-k我不知道,但您可以使用just-one-space函数将任意数量的空间转换为juste一个空格(它绑定在M-space上)

答案 1 :(得分:4)

如果给 M - ^ 一个参数(例如 C-u M - ^ ),它会将下一行连接到当前行。

答案 2 :(得分:1)

这是一种将您想要的行为(我认为)插入kill-line的方法:杀死换行符时,也会删除后面的缩进。请注意,这可能导致光标后没有空格,这就是为什么我认为我会选择M-1 M-^C-k M-SPC

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

答案 3 :(得分:0)

这样做:

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

答案 4 :(得分:0)

我的.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)

它会将下一个非空白行拉到this一行,如果this行上有任何内容,则会调用(fixup-whitespace)来执行正确的约95%的操作时间,否则它将它缩进到emacs认为是正确的级别。我想我从vim复制了这个概念?

无论如何,我一直都在使用它。

答案 5 :(得分:0)

我刚刚意识到我的.emacs中也有这个,它更像你想要的,虽然我忘记了我拥有它,因为我经常使用拉线。我想我从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)