Emacs 如何使用yasnippet和abbrev使自动完成工作?
我希望Emacs能像这样工作:Emacs 如何使用yasnippet和abbrev使自动完成工作?,emacs,autocomplete,key-bindings,yasnippet,Emacs,Autocomplete,Key Bindings,Yasnippet,我希望Emacs能像这样工作: 让自动完成自动弹出菜单: (setq ac-auto-show-menu 0.8) (setq ac-delay 0.1) 使用C-n/p/M-n/p选择自动完成弹出菜单候选项: (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-
- 让
自动弹出菜单:自动完成
(setq ac-auto-show-menu 0.8) (setq ac-delay 0.1)
- 使用C-n/p/M-n/p选择
弹出菜单候选项:自动完成
(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)
- 如果候选人是abbrev,Enter应仅选择candiate:
。。。按空格键会使Emacs自动展开abbrev;; ???
- 如果候选项是dabbrev,则在候选项上按M-\n将触发
dabbrev expand
- 按TAB/C-i展开yasnippet的候选项:
我设置了这个,但当我按TAB键时触发器不会展开(setq yas-trigger-key "TAB")
- 在字段中按TAB键展开代码段触发器:
(setq yas-triggers-in-field t)
- 按C-j键跳转到下一个字段:
但是在某些模式下((setq yas-next-field-key '("<tab>")) ;; or "C-j"
,ruby模式
,降价模式
,等等),命令绑定到org模式
。当键入真正的tab键时,绑定到(kbd”“)
的函数具有更高的优先级,因此不会调用(kbd”)
和yasnippet
。通过移动键绑定可以很容易地解决这一问题:自动完成
(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)
我的设置 我通过(defun iy选项卡无冲突() (让((命令(键绑定[tab]));记住命令 (本地未设置键[选项卡];从(kbd“)取消设置) (本地设置键(kbd“TAB”)命令);重新绑定到(kbd“TAB”) (添加钩子'ruby mode hook'iy ac tab noconflict) (添加挂钩“降价模式挂钩”iy ac选项卡无冲突) (添加钩子“组织模式钩子”iy ac选项卡无冲突)
packager管理器下载了el-get
,yasnippet
。我使用的是Ubuntu 12.04和Emacs 24.3.50.1 收尾 我知道这个问题有点长,但它确实让我很难使用auto complete
和自动完成
。如果基本密钥绑定不能顺利工作,这会使我的工作流程慢很多。我想很多人都有类似的问题,因为我在互联网上发现了一些类似的问题(虽然没有一个和我的一模一样) 正如您在上面看到的,一些相关设置我已经知道了。(但是如果您认为我在某个地方犯了错误,请告诉我。)还有一些事情我仍然不知道如何设置(yasnippet
)。也许没有办法使所有这些设置一起工作?如果是这样,请告诉我,否则请确保这些设置不会相互干扰 在得到这个问题的答案后,我希望编写一个Emacs扩展来自动初始化所有这些设置?
谢谢你的帮助!我很早以前就遇到了你描述的问题,并这样解决了它: 将
绑定到选项卡(同样是C-i) 和自动完成
到C-o。 Abbrev也在C-o上,但我不经常使用 优点是:yasnippet
- 没有状态行为会导致更轻松、更高效的编辑
- 在按下之前,您不再想“TAB在这种情况下会做什么?”, 你只要按它
- 你不再检查你是否得到了预期的结果,因为只有一个
- 在扩展yasnippet的过程中,您可以使用
自动完成
- C-i和C-o是邻居,很容易按下
- 由于没有模式覆盖C-o,所以Yasnippets现在可以在任何模式下可靠地扩展 这可能不是你现在想要的,而是试着去尝试:
过一会儿你可能会喜欢它。绑定
或RET
函数
。这是为选定的候选人准备的。好主意,我以前试过,但仍然试图找到解决方案,因为我认为TAB是用于此操作的。这似乎很神奇。但确实如此。我发现C-o很好。我会喜欢它。但我仍然有e问题,关于使用[Enter]在自动完成弹出菜单中选择候选人。yasnippet似乎不能为我工作(这是我知道的另一个问题)。我尝试使用[M-x yas expand]要扩展触发器,但它也不起作用。您对这个问题有何看法?对于ac expand
,我总是使用自动完成
或选项卡
展开,从来没有使用C-I
。对于RET
,您可以从MELPA和yasnippet
。不,我不想用获得
(全局设置键“\C-o”'aya打开行)自动yasnippet
完成,我用RET
选择Conducate。我让auto complete自动弹出菜单。我把RET
选项卡给snippet engine->YASnippet。正如你喜欢的,我用
选择候选人。对不起,也许你误解了我的意思,我的意思是我用C-I
或C-n/p
在自动完成弹出菜单中导航。我想使用M-n/p
在菜单中选择候选人。如果我没有误解您的话,我想您可以使用RET
启用自动完成以弹出菜单。如果我想使用C-I
选择候选人,我至少需要一个绑定函数,选择cand的函数是什么伊达特?C-I
;; trigger using TAB and disable auto-start (custom-set-variables '(ac-trigger-key "TAB") '(ac-auto-start nil) '(ac-use-menu-map t))
(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)
- 在弹出菜单选择中禁用TAB/S-TAB: