在Emacs全线完成?

时间:2013-07-29 15:48:26

标签: emacs

如何在Emacs中获得全线完成,类似于Vim的CTRL-x l

例如,在Vim中,如果我输入:

from d<CTRL-X>-l

我会得到一个像这样的弹出窗口:

vim line completion popup

显示在开放缓冲区中与该前缀匹配的所有行。

6 个答案:

答案 0 :(得分:2)

这不提供可供选择的列表(尝试调整autocomplete),否则会给出“感觉”。

(defun my-expand-lines ()
  (interactive)
  (let ((hippie-expand-try-functions-list
         '(try-expand-line)))
    (call-interactively 'hippie-expand)))

(define-key evil-insert-state-map (kbd "C-x C-l") 'my-expand-lines)

答案 1 :(得分:1)

hippie-expand会这样做,您只需按照上一个答案的说明对其进行配置:Does Emacs has word and line completion (like Vim's insert mode completion)?

答案 2 :(得分:1)

如果您习惯将列表导航为缓冲区,则Emacs会附带multi-occur

否则你应该了解helm。请参阅此回答https://stackoverflow.com/a/14731718/903943

答案 3 :(得分:0)

Icicles 命令icicle-occur执行您的要求。它允许您在多个文件或缓冲区中的搜索模式匹配中查找和导航,在您更改要搜索的模式时逐步更新搜索命中集。您可以通过应用其他模式逐步优化搜索。您可以直接,单独访问匹配,也可以在各种循环次序中循环访问。

答案 4 :(得分:0)

请参阅https://github.com/redguardtoo/eacl - Emacs自动完成行

eacl与其他解决方案之间的区别:

  • 通过在当前项目中点击文件获得更多候选项(如果使用git / svn / mercurial,则会自动检测项目根目录)

  • 它可以通过grepping

  • 完成多行语句

答案 5 :(得分:-1)

需要一些操作,但您可以将公司完成和嬉皮扩展结合起来,为您提供当前缓冲区中的行的弹出菜单。

首先,您需要定义一个函数来调用try-expand-line(修改为返回扩展而不是调用he-expand并返回t)来自hippie-exp.el并收集所有扩展:

(defun get-hippie-expand-lines ()
  (let (completions-list candidate)
    (setq candidate (my-try-expand-line nil))
    (if candidate
        (progn
          (push candidate completions-list)
          (while (progn
                   (setq candidate (my-try-expand-line t))
                   (if candidate
                       (push candidate completions-list)
                     nil))))
      nil)
    completions-list))

然后,您可以编写小公司后端,通过公司弹出窗口向您提供完成候选人。

(defun company-hippie-line (command &optional arg &rest ignored)
  (interactive (list 'interactive))
  (cl-case command
    (interactive (company-begin-backend 'company-hippie-line))
    (prefix (and (not (looking-at "[:word:]"))
                 (let (p1 p2)
                  (save-excursion
                    (end-of-line)
                    (setq p2 (point))
                    (back-to-indentation)
                    (setq p1 (point)))
                  (buffer-substring-no-properties p1 p2))))
    (candidates (get-hippie-expand-lines))))
;; Uncomment if you want to get line completion popups whenever found
;; (add-to-list 'company-backends 'company-hippie-line)
(global-set-key (kbd "C-x l") 'company-hippie-line)

请参阅this post的进一步讨论。