我想复制光标上方的行,但只是从当前列复制到该行的末尾。
以下是插图:
这是我的尝试,但效果并不好: - (
(defun dupchar()
(save-excursion
(line-move (-1) nil nil nil)
(setq mychar (thing-at-point 'char))
(insert mychar))
答案 0 :(得分:1)
尝试这样的事情。
(defun dupchar ()
(interactive)
(let ((char-above (save-excursion
(line-move -1)
(following-char))))
(unless (eq char-above ?\n)
(insert char-above))))
(define-key global-map [(meta \")] 'dupchar)
关于你写的函数的一些评论:
您需要使用(interactive)
否则你无法绑定
功能键。
这不是一个好主意
随机setq
创造的东西
全局变量。在这种情况下你
根本不需要变量;您
可以利用返回值
来自save-excursion
。 (在后面的版本中,我需要使用let。)
括号中调用一个函数
(e)lisp,所以你需要使用-1
而不是(-1)
。
'line-move
的第2至第4个参数将默认为nil
,因此无需指定它们。
(注意:我将其修改为在行尾停止;再次难以理解你写的内容,但这是我最好的猜测。)
答案 1 :(得分:0)
不确定您是否打算通过一次击键复制上一行的整个末尾。至少我认为这会有用,所以我将Nicholas(谢谢!)代码修改为dupline
:
(defun dupline ()
(interactive)
(let ((line-above-tail (save-excursion
(line-move -1)
(buffer-substring-no-properties (point) (line-end-position)))))
(unless (eq line-above-tail ?\n)
(insert line-above-tail))))
复制到该行的末尾的灵感来自How do I duplicate a whole line in Emacs?