我希望Emacs像这样工作:
让auto-complete
自动弹出菜单:
(setq ac-auto-show-menu 0.8)
(setq ac-delay 0.1)
使用 C-n / p / M-n / p 选择auto-complete
弹出菜单候选:
(define-key ac-menu-map (kbd "M-n") 'ac-next)
(define-key ac-menu-map (kbd "M-p") 'ac-previous)
选择候选人时
在弹出菜单选择中禁用 TAB / S-TAB :
(define-key ac-menu-map (kbd "<tab>") nil)
(define-key ac-menu-map (kbd "<S-tab>") nil)
按 Enter 选择候选人,而不插入换行符:
;; ???
如果候选人是缩写, Enter 应该只选择候选人:
;; ???
...并按 Space 会导致Emacs自动展开缩写。
如果候选人是 dabbrev ,则在候选人上按 M - \ 会触发dabbrev-expand
。
按 TAB / C-i 展开yasnippet
的候选人:
(setq yas-trigger-key "TAB")
我设置了这个,但是当我按 TAB 时触发器不会扩展。
按 TAB 在字段中展开代码段触发器:
(setq yas-triggers-in-field t)
按 C-j 跳转到下一个字段:
(setq yas-next-field-key '("<tab>")) ;; or "C-j"
How can I expand a snippet within a snippet using yasnippet
?
Emacs中有两个 TAB :
(kbd "TAB")
/ (\t, [9])
(kbd "<tab>")
/ ([tab])
如果yasnippet
和auto-complete
等模式想要绑定到 TAB ,则其触发键必须与原始tab命令相同。由于Emacs将indent-for-tab-command
绑定到(kbd "TAB")
,因此最好将其用作触发键。 yasnippet
默认绑定到它,并且很容易设置auto-complete
以使用 TAB 触发:
;; trigger using TAB and disable auto-start
(custom-set-variables
'(ac-trigger-key "TAB")
'(ac-auto-start nil)
'(ac-use-menu-map t))
但在某些模式下(ruby-mode
,markdown-mode
,org-mode
等),命令必然会
(kbd "<tab>")
。键入实际Tab键时,绑定到(kbd "<tab>)
的函数具有更高的优先级,因此不会调用yasnippet
和auto-complete
。通过移动键绑定很容易解决这个问题:
(defun iy-tab-noconflict ()
(let ((command (key-binding [tab]))) ; remember command
(local-unset-key [tab]) ; unset from (kbd "<tab>")
(local-set-key (kbd "TAB") command))) ; re-bind to (kbd "TAB")
(add-hook 'ruby-mode-hook 'iy-ac-tab-noconflict)
(add-hook 'markdown-mode-hook 'iy-ac-tab-noconflict)
(add-hook 'org-mode-hook 'iy-ac-tab-noconflict)
我通过yasnippet
打包管理器下载了auto-complete
,el-get
。我正在使用Ubuntu 12.04和Emacs 24.3.50.1。
我知道这个问题有点长,但这确实让我很难使用auto-complete
和yasnippet
。如果基本键绑定不能顺利运行,这会大大减慢我的工作流程。我想很多人都有类似的问题,因为我在互联网上发现了一些类似的问题(尽管它们都不像我的一样)。
如上所示,我已经了解了一些相关设置。 (但如果你认为我在某个地方犯了错误,请告诉我。)还有一些我还不知道如何设置的事情(???
)。也许没有办法让所有这些设置一起工作?如果是这种情况,请告诉我,否则请确保这些设置都不会相互干扰。
在我得到这个问题的答案之后,我希望编写一个Emacs扩展来自动初始化所有这些设置。
感谢您的帮助!
答案 0 :(得分:2)
我遇到了你很久以前所描述的问题,并解决了这个问题:
将auto-complete
绑定到 TAB (同样 C-i )
和yasnippet
到 C-o 。
简称也在 C-o 上,但我不会经常使用它们。
优点是:
auto-complete
。yasnippet
这可能不是您现在想要的,但请考虑尝试: 你可能会在一段时间后喜欢它。
答案 1 :(得分:0)
将RET
或<return>
绑定到ac-expand
。这是针对精选候选人的。