Emacs命令在光标上方插入和缩进行
当我意识到我需要在上面一行输入一个变量定义(或类似的东西)时,我经常会在一行上输入。我想做的是Emacs命令在光标上方插入和缩进行,emacs,elisp,Emacs,Elisp,当我意识到我需要在上面一行输入一个变量定义(或类似的东西)时,我经常会在一行上输入。我想做的是 从一行的任意位置按C-return键,将光标移动到上方新插入的空白行,缩进正确(或至少与原始行相同) 能够拖动任何文本 和C-u C-space返回到原始位置 我已经设法做到了#1,但我的emacs fu不够强壮,无法完成剩下的部分。如果你不是禅宗大师emacs的花花公子,你可以做些什么 Emacs有一个记录宏,即kmacro开始宏和kmacro结束宏 录制完宏后,请命名最后一个kbd宏。然后访问.e
我已经设法做到了#1,但我的emacs fu不够强壮,无法完成剩下的部分。如果你不是禅宗大师emacs的花花公子,你可以做些什么 Emacs有一个记录宏,即kmacro开始宏和kmacro结束宏 录制完宏后,请命名最后一个kbd宏。然后访问.emacs,插入kbd宏
然后有一个定义宏的fset语句。它可能看起来很有趣,而且不像elisp那样可维护,但如果您将它塞进.emacs中,该宏(以该名称命名)将可用于任何编辑会话。您还可以将其绑定到密钥序列 回答我自己的问题可能形式不好,但Cheeso的回答促使我在十年内第二次使用lisp编程(我最初的版本是命名键盘宏,但它跨越了kill/mark环)。这是我想到的
(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黑客攻击很难被称为浪费时间:-)以下是我的简单解决方案:
(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)))
希望有帮助。很有趣。IIUC,您的解决方案使光标保持静止,并“自动拉”到上面正确缩进的线中。我认为这可能比我要求的更适合我的使用模式。谢谢:-)代码应该使用
保存偏移
,应该避免使用yank
,并且应该在文本不在缓冲区末尾时进行常规处理(最大点
)。@aaronhawley-为什么要“保存偏移”?我不会改变我正确处理的标记点,上面的代码几乎不会引起缓冲区的崩溃。你能更具体地说一下“当文本不在缓冲区的末尾时”的情况吗?无论何时点在调用的时候,它都会做同样的事情。我喜欢这个解决方案,但是我无法修改它以在终端上工作。关于如何实现这一点有什么想法吗?@Sambatyon不知道(终端+emacs+windows通常很痛苦,所以我倾向于避免它)。如果你问一个新问题,我相信有人会知道的……我几分钟前就想出来了。问题是终端模拟器没有发送正确的消息,我需要转到iTerm首选项并为cmd+enter添加一个keybinding来执行[13;5u]