当我意识到我需要(编辑)上面一行的变量定义(或类似的东西)时,我经常发现自己在一条线上打字。我想要的是
我成功地做了#1,但是我的emacs-fu还不够强大,无法完成剩下的工作。
答案 0 :(得分:8)
这是我谦虚的解决方案:
(defun my-insert-before-line ()
(interactive)
(save-excursion
(beginning-of-line)
; I've changed the order of (yank) and (indent-according-to-mode)
; in order to handle the case when yanked line comes with its own indent
(yank)(indent-according-to-mode)
; could be as well changed to simple (newline) it's metter of taste
; and of usage
(newline-and-indent)))
希望它有所帮助。
答案 1 :(得分:3)
如果你不是一名禅师,那么你可以做些什么。
Emacs有一个记录宏的东西,kmacro-start-macro和kmacro-end-macro。
录制宏后,执行name-last-kbd-macro。然后访问.emacs,并执行insert-kbd-macro。
然后你有一个定义你的宏的fset语句。它可能看起来很有趣,并且它不像elisp那样可维护,但是如果你把它填入你的.emacs中,那个宏(通过那个名字)将可用于你的任何编辑会话。您也可以将它绑定到键序列。
答案 2 :(得分:3)
回答我自己的问题可能是不好的形式,但Cheeso的回答促使我十年来第二次做一些lisp编程(我的原始版本是一个命名的键盘宏,但它遍布了kill / mark-rings )。这是我想出来的
(defun insert-and-indent-line-above ()
(interactive)
(push-mark)
(let*
((ipt (progn (back-to-indentation) (point)))
(bol (progn (move-beginning-of-line 1) (point)))
(indent (buffer-substring bol ipt)))
(newline)
(previous-line)
(insert indent)))
(global-set-key [ (control return) ] 'insert-and-indent-line-above)
可能有很多更好的方法可以做到这一点,但是两个小时的lisp-hacking很难被称为浪费时间: - )