Emacs:在函数中向后移动两行?

3

我的emacs点文件中有一个在日志中插入日期的函数。添加后,我想跳回几行并将光标放在日期下面。该如何在函数中实现?

(defun ddd ()
  "Insert date at point journal style."
  (interactive)
  (insert (format-time-string "[%Y-%m-%d %a]"))
  (insert "\n")
  (insert "\n")
  (insert "\n")
  (insert "** end\n")
  (gobacktwolineshere))

任何想法?
4个回答

10

你需要函数forward-line,具体来说

(forward-line -2)

向后移动两行。要了解更多信息,在emacs中键入 C-h f forward-line RET。根据光标的位置,你可能不会停在行的开头。如果需要到达行的开头,请添加调用beginning-of-line


5
请记住,如果您可以通过交互方式告诉Emacs执行某个操作(例如在此实例中使用<up>C-p),那么您可以在输入该操作时通过前缀C-hk来询问Emacs它所执行的操作。
在这种情况下,Emacs会告诉您这些按键运行了命令previous-line,并且还提供了以下信息:

如果您考虑在Lisp程序中使用此功能,请考虑改用带有负参数的forward-line。它通常更容易使用和更可靠(不依赖于目标列等)。


2

您可能希望使用save-excursion来使代码更加健壮:

(defun ddd ()
  "Insert date at point journal style."
  (interactive)
  (insert (format-time-string "[%Y-%m-%d %a]\n"))
  (save-excursion (insert "\n\n** end\n")))

是的,这可能是问题的最佳解决方案,即使它不是所述问题的答案。 - phils

1

如果您知道要返回多少个字符,可以使用(backward-char 9)


2
这可能有点脆弱,因为它取决于插入了多少个字符。 - Dale Hagglund

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接