当我点击C-k时,Emacs会杀到最后一行。当我再次击中C-k时,它“杀死换行符”并带来下一行。但是,下一行的缩进保持不变,最后你可以得到一条中间有很多空格的行。
所以,从这个:
previous line material
next line material
到此:
previous line material next line material
我知道我可以使用M- ^正确连接线,但这需要光标位于下一行。如何修改C-k,以便在杀死换行符时也杀死下一行的缩进?
答案 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)