Vim使用CTRL-X P
和CTRL-L.
完成单词和行。有一个名为公司模式的Emacs插件,但此插件会干扰并导致与Emacs中的许多内容冲突(使用全局linum和yasnippets)。我知道我可以在Emacs中使用CTRL- /来完成单词。但是可以采用以前写过的行来完成代码吗?
答案 0 :(得分:7)
也许您正在寻找hippie-expand?从该网页(截至本文撰写,无论如何):
HippieExpand之前看过这个词 指向并尝试将其展开 各种方式,包括扩展 固定列表(如
expand-abbrev
), 从匹配的文本中扩展 缓冲区(如dabbrev-expand
)或 以您自己定义的方式扩展 功能。其中的哪一个尝试和 以什么顺序由a控制 可配置的功能列表。
有关完成选项的完整列表,请访问emacs wiki page on completion。
答案 1 :(得分:3)
在Emacs中有很多方法可以完成。一些是特定于模式的,一些是内联的,一些是可配置的,哪些不是。 Here是可能对您有所帮助的模式列表。
答案 2 :(得分:2)
使用数字参数逐行完成,说M-5 M-/
将按行完成,而M-/
单独仍然按正常方式完成。
hippe-expend
函数有一个非常有用的功能:
With a positive numeric argument, jumps directly to the ARG next function in this list. With a negative argument or just C-u, undoes the expansion.
自定义hippie-expand-try-functions-list
中的扩展函数并将函数try-expand-line
作为第5个列表元素,然后您可以使用M-5 M- /按行完成。
这个技巧非常方便实用,我强烈推荐它。
答案 3 :(得分:1)
另外值得注意的是:如果您的窗口管理器没有窃取Alt-tab,则emacs将使用Alt-tab自动完成(我将窗口管理器设置为使用“windows key”而不是alt,因为这个原因)。
答案 4 :(得分:0)
如果您使用evil
,这是我使用的最类似vim的解决方案:
(defun my-expand-lines ()
(interactive)
(let ((hippie-expand-try-functions-list
'(try-expand-line-all-buffers)))
(call-interactively 'hippie-expand)))
(define-key evil-insert-state-map (kbd "C-x C-l") 'my-expand-lines)
通过这种方式,你可以在插入模式下使用我们的老朋友C-x C-l
来获得整行所有缓冲区的完成。
感谢@ymln提出使用try-expand-line-all-buffers
的建议。