如何让Emacs完成C包含文件中的单词?
#include <stdio.h>
int main(){
print//<-- this is where I want it to complete printf
最简单的方法是什么? (比Cedet更简单的东西)
答案 0 :(得分:4)
首先为您希望能够自动完成的源和包含文件生成标记。如果您之前没有使用过代码表,请参阅我的博客文章,了解有关using tags的提示。
现在,如果你有一个包含stdio.h的TAGS表,那么你可以使用命令`complete-tag'自动完成'printf'。
也许将`complete-tag'绑定到一个键:
(global-set-key [f3] 'complete-tag)
答案 1 :(得分:4)
与完整标签,dabbrev-expand或者嬉皮扩展(它可以像事物那样进行dabbrev-expand)不同,CEDET套件完全符合问题所描述的内容。当被要求执行完成时,它看起来并且看到你已经包含了stdio.h,然后在那里寻找可能的完成。
CEDET还完成了许多与完成相关的其他事情,它们将提供非常集中和正确的建议,而不仅仅是模糊的类似建议。副作用是CEDET需要更多的努力来设置。例如,您需要在包含文件的地方教它,有时候如何处理宏,以及您正在处理的项目是什么样的。
这里有更详细的信息: link text
答案 2 :(得分:0)
您可能想尝试M- /(dabbrev-expand)。此命令尝试使用当前缓冲区的内容然后使用相同模式的其他缓冲区的内容完成紧靠该点之前的标识符(即光标所在的位置)。如果提供的第一次完成不是您想要的,只需输入M- /。如果您习惯于连续打开一个emacs会话(如果您没有,那么您应该真正获得),并且从当前项目中打开一些文件,您很可能能够找到任何特定前缀所需的扩展。
所以,为了回答你原来的问题,如果(a)你在缓冲区中的任何其他位置使用了printf
,那么M- /会找到你正在寻找的printf
完成重新编辑,或(b)它出现在您在emacs中打开的任何其他.c或.h文件中。
答案 3 :(得分:0)
您也可以尝试hippie-expand
,它有关于查找完成信息的其他选项。我将M- /绑定到hippie-expand
,然后修改hippie-expand-try-functions-list
中元素的顺序,如下所示:
(global-set-key (kbd "M-/") 'hippie-expand)
(setq hippie-expand-try-functions-list '(try-expand-dabbrev try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-complete-file-name-partially try-complete-file-name try-expand-all-abbrevs try-expand-list try-expand-line try-complete-lisp-symbol-partially try-complete-lisp-symbol))
这使hippie-expand
首先表现为正常的M- /,但重复按下会产生更多可能的扩展。