emacs:函数中返回两行?

emacs:函数中返回两行?,emacs,lisp,Emacs,Lisp,我在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")

我在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))

有什么想法吗?

如果您知道要返回多少个字符,您可以使用
(向后字符9)
您想要的功能
向前行

(forward-line -2)

向后走两行。有关详细信息,请在
emacs
内键入
C-h f forward line RET
。根据您离开点的位置,您可能不会在行首结束。如果您想这样做,请添加一个对
行开头的调用

记住,如果您可以告诉Emacs以交互方式执行此操作(例如,在本例中使用或C-p),那么您可以在键入时通过前缀C-hk询问Emacs它执行什么操作

在本例中,Emacs告诉您这些键运行命令
前一行
,并且:

如果你想在LISP程序中使用这个,请考虑使用

向前行
,改为使用负参数。通常比较容易 使用和更可靠(不依赖于目标列等)


您可能希望使用
保存偏移
使其更加健壮:

(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")))

这可能有点脆弱,因为它取决于插入的字符数。是的,这可能是解决问题的最佳解决方案,即使它不是所述问题的答案。