制作C-M-RET插入\ item []

时间:2011-10-19 09:39:55

标签: emacs keyboard-shortcuts auctex

在AUCTeX中 M-RET 绑定到(LaTeX-insert-item),这会产生一个新的正确缩进行并插入\item和一个空格,之后放置光标。我想扩展此功能,以便 C-M-RET 具有类似的功能,但适用于\item[description]

我想要的是 C-M-RET

  1. 制作一个新的正确缩进行并插入\item[]
  2. 将光标放在方括号和
  3. 之间
  4. 将光标放在\item[]之后,按 Tab

2 个答案:

答案 0 :(得分:2)

以下函数来自latex.el,并略微修改以调用参数提示版本LaTeX-item-argument,而不是直接插入项目。

(defun LaTeX-insert-item-arg ()
  "Insert a new item in an environment, prompting for an item label.
You may use `LaTeX-item-list' to change the routines used to insert the item."
  (interactive "*")
  (let ((environment (LaTeX-current-environment)))
    (when (and (TeX-active-mark)
           (> (point) (mark)))
      (exchange-point-and-mark))
    (unless (bolp) (LaTeX-newline))
    (if (assoc environment LaTeX-item-list)
    (funcall (cdr (assoc environment LaTeX-item-list)))
      (LaTeX-item-argument)) ;; ONLY THIS LINE IS DIFFERENT
    (indent-according-to-mode)))

您可以将该功能绑定到您喜欢的任何键:

(add-hook 'LaTeX-mode-hook (lambda () 
    (local-set-key [(control return)] 'LaTeX-insert-item-arg)))

如果您需要M-C-RET,请改用(meta control return),但它似乎只能使用Alt密钥,而不是Esc密钥(通常表现相同) ...)

答案 1 :(得分:1)

听起来你想要Textmate片段行为。

您需要yasnippet才能进行代码段扩展/字段移动。 IMO,将它绑定到密钥并不是一个好的解决方案,因为密钥的数量是有限的,但yasnippet也允许你这样做。