Emacs红宝石符号字完成

时间:2010-08-04 07:09:36

标签: ruby emacs autocomplete symbols

我经常定义一个ruby符号(例如:some_value),然后我想创建一个名为def some_value的方法。

不幸的是,第二次出现some_value字符串的自动完成(M + /)不起作用,略有不同(:some_value vs some_value)。

如何设置emacs来处理此类事件?

5 个答案:

答案 0 :(得分:7)

假设M- /绑定到dabbrev-expand,您可以配置dabbrev-mode以在扩展字符串时忽略某些前缀。要使单个冒号成为要忽略的前缀,请键入

M-x customize-group

然后

dabbrev

这将带您进入dabbrev-mode的自定义页面。转到 Dabbrev Abbrev Skip Leading Regexp 并单击Value menu。从菜单中选择“Regexp”。

现在您在值菜单旁边看到一个标有“正则表达式:”的文本字段,您可以在其中输入单个冒号。

:

然后点击下一行中的按钮State,然后选择值“保存以供将来使用”。

答案 1 :(得分:2)

首先,我的结果!我在模型中输入了:some_crazy_symbol。在换行符中,我输入def so,点击M-/两次,最后输入

def some_crazy_symbol
end

(Rinari提供了end。)

使用hippie-expand让我的工作做得很好。如果您想对其进行测试,请将hippie-expand绑定到M-/,如下所示:

(global-set-key (kbd "M-/") 'hippie-expand)

下面有' documentation。 Hippie通过在当前点上尝试许多不同的扩展来扩展工作。这些扩展存储在hippie-expand-try-functions-list变量中。在我的系统上(默认),此变量设置为:

(try-complete-file-name-partially try-complete-file-name try-expand-all-abbrevs try-expand-list try-expand-line try-expand-dabbrev try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-complete-lisp-symbol-partially try-complete-lisp-symbol)

迷你缓冲区读数显示此特定扩展是使用try-expand-dabbrev函数完成的。

答案 2 :(得分:1)

不能直接回答您的问题,但是您应该使用auto complete modersense配对来获得更智能的Ruby自动完成功能。

答案 3 :(得分:1)

如果 Dabbrev Abbrev Skip Leading Regexp hippie-expand没有完全符合您的要求并且您有一些elisp技能,那么您可以为{{1}创建一个自定义函数}。

请参阅emacs-wiki上 substring expansion 页面上有关“hippie-expand”的部分。你可以在那里使用一个功能,你可以定制自定义..

  

<强> Substring Expansion

     

在进行lisp编程时,标准dabbrev不太有用,因为Emacs没有名称空间,所以在包中符号以相同的前缀开头,因此如果想要从包中完成符号,则必须反复输入相同的前缀。与IswitchBuffers一样,如果可以键入唯一的子字符串以获得所需的符号,则效率会更高。

     

Dabbrev在这方面没有任何提供,所以我转向了以前从未使用过的Hippie Expand。

     

这是一个基于hippie expand dabbrev扩展的函数,它执行子串扩展:

hippie-expand

答案 4 :(得分:1)

我想我会分享solution I came up with that works for hippie-expand

总结:

(defun hippie-expand-ruby-symbols (orig-fun &rest args)
  (if (eq major-mode 'ruby-mode)
      (let ((table (make-syntax-table ruby-mode-syntax-table)))
        (modify-syntax-entry ?: "." table)
        (with-syntax-table table (apply orig-fun args)))
    (apply orig-fun args)))

(advice-add 'hippie-expand :around #'hippie-expand-ruby-symbols)
hippie-expand被视为标点字符时,

ruby-mode会在:中展开符号,因此此建议会创建一个临时语法表,其中:是标点符号并调用{ {1}}用它。