在vim中 我可以 autocmd Filetype tex inoremap ,d \document{} 这样设置一些在latex中的映射 来简化输入
请问在emacs中如何实现类似的功能呢?
在vim中 我可以 autocmd Filetype tex inoremap ,d \document{} 这样设置一些在latex中的映射 来简化输入
请问在emacs中如何实现类似的功能呢?
Emacs 太丰富了,最基本的方法是这样的:
(global-set-key (kbd "键") #'一个命令) ;;全局
(define-key '某个mode-map (kbd "键") #'一个命令) ;;仅在某个mode下,优先级高于全局
;; 比如
(define-key 'latex-mode-map (kbd "C-c C-d") #'(lambda () (interactive) (insert "\document{}")))
别的 package(比如 evil、general)可能有自己的定义方法。
好的 谢谢您的解答 我去试试
确实可行 感谢 另外我发现 绑定的建是不是一定得ctrl开头? (define-key ‘latex-mode-map (kbd “, m”) #’(lambda () (interactive) (insert “\document{}”))) 比如按上面这个, 我想实现按下逗号 在按m就出来 \document。 但是好像就不行,如果写成 (define-key ‘latex-mode-map (kbd “C-c m”) #’(lambda () (interactive) (insert “\document{}”))) 就没问题。
另外 好像 \ 这个符号无法正常输入。 如果绑定 \document 最后打出来就是 ^?ocument
\是转义字符,输入\,需要写成(insert “\\document”),写两个\,我也是使用的逗号作快捷键前缀,我用逗号来输入单个大写字母等,建设尝试hydra,感觉比emacs原生的按键绑定更好用
我发现如果用 , m 来输入一些东西, 我没有办法单独输入逗号了
如果你想用,m像vim一样输入一个代码片段,最终还是要装evil吧这个按键组合绑定到normal-mode。或者用key-cord,经过一段时间延迟后输入按键本身代表的字符,我的建议是干脆用专门的包yasnippt
key-chord
emacsorphanage/key-chord: Map pairs of simultaneously pressed keys to commands (github.com)
general.el
也对这个有包装
提问一下,hydra key-chord还有general之间是啥关系?如果要对快捷键做一个总的配置,应该用哪个?
我用hydra和general,general比较强大,基本可以取代key-chord了.
我是中英文逗号都被我当快捷键用了(方便中文状态下按快捷键),这样就不能按一次就输入逗号,我中英文逗号是按两次输入, 我另一帖中代码写的是(insert-char 44)
插入英文逗号, (insert-char 65292)
插入中文逗号,实际直接(insert ",")
逗号就插入
我现在的方案是基于 yasnippet
的。由于 yasnippet
里还不支持自动展开,所以我抄了 https://github.com/joaotavora/yasnippet/issues/998 里的设置。在配置文件里加入
(defun my-yas-try-expanding-auto-snippets ()
(when (and (boundp 'yas-minor-mode) yas-minor-mode)
(let ((yas-buffer-local-condition ''(require-snippet-condition . auto)))
(yas-expand))))
(add-hook 'post-command-hook #'my-yas-try-expanding-auto-snippets)
然后设置 latex-mode
的模板就行。在你举的例子中,可以这么设置
# -*- mode: snippet -*-
# name: document
# key: ,d
# condition: 'auto
# --
\document{$0}
issue里面还给出了限定模板只能在 math
环境中展开的方法,就是在模板的 condition 里面加上 texmathp
的限制,这个我比较常用,比如写分数的这个
# -*- mode: snippet -*-
# name: fraction-slash
# key: //
# condition: (and (texmathp) 'auto)
# --
\frac{$0}{}
其实这种模板在vim里面比较方便,插件支持自动展开,在行首展开之类的。在 emacs里就比较麻烦,我也想知道有没有比较简单的方案。