【问题标题】:How to accomplish equivalent of Vim's Ctrl-n in GNU Emacs?如何在 GNU Emacs 中完成相当于 Vim 的 Ctrl-n?
【发布时间】:2010-10-01 16:43:11
【问题描述】:

Vim 的 Ctrl+N 一般是这样工作的:我输入几个字母,点击 Ctrl+N, Vim 会根据我所有打开的缓冲区中的单词为我提供补全。

Emacs 的解决方案不必完全相同。我主要是这样使用它:声明变量,然后在以后的代码中使用它。但我喜欢解析源代码的轻量级方法。

【问题讨论】:

  • 不错的提示,不知道 Ctrl-n!

标签: emacs autocomplete


【解决方案1】:

你想要 dabbrev-expand,默认绑定到 M-/。我没有用过 Vim,但从你的描述来看,它的作用完全一样。

【讨论】:

  • 值得注意的是,如果 M-/ 第一次没有给出你想要的,重复按下它会循环匹配。
  • 这应该是第一个答案,第二个答案。
【解决方案2】:

尝试 hippie-expand,绑定到您最喜欢的键

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

不是显示完成列表,而是通过就地完成重复点击绑定键循环。

为什么“嬉皮”-展开?我不知道,实际上我避免查看该函数,因为该名称没有提供信息且令人反感,直到我读到the write-up at 'Life Is Too Short For Bad Code'.EmacsWiki entry on hippie-expand 还问“为什么是'嬉皮士?'”但无法回答,要么。)

【讨论】:

    【解决方案3】:

    我个人使用AutoComplete 它为您提供了一个不错的下拉框。您可以选择在激活之前要输入多少个字母,并自定义要显示的内容,包括 dabbrev-expand 中的内容。

    【讨论】:

      【解决方案4】:
      ;; Allow tab to autocomplete
      
       (defun indent-or-expand (arg)
         "Either indent according to mode, or expand the word preceding point."
         (interactive "*P")
         (if (and
              (or (bobp)      (= ?w (char-syntax (char-before))))
              (or (eobp) (not (= ?w (char-syntax (char-after))))))
             (dabbrev-expand arg)
           (tab-to-tab-stop)))
      
       (defun my-tab-fix ()
         (local-set-key [tab] 'indent-or-expand))
      
       (add-hook 'as-mode-hook         'my-tab-fix)
       (add-hook 'java-mode-hook       'my-tab-fix)
       (add-hook 'c-mode-hook          'my-tab-fix)
       (add-hook 'sh-mode-hook         'my-tab-fix)
       (add-hook 'emacs-lisp-mode-hook 'my-tab-fix)
      

      【讨论】:

        【解决方案5】:

        在我看来,问题是我尝试的 emacs 补全在上下文方面没有完成。

        例如,如果您使用方法 foobar() 和参数 foo 编写一些 OOP,M-/ 会建议您同时使用 foo 和 foobar。

        但是如果你调用一个对象方法会很棒,而不是仅仅提供“foo”完成。

        有人有解决办法吗?

        【讨论】:

        • 对我来说不是什么大问题。 C++ 的可靠完成非常困难。
        【解决方案6】:

        Aif> 这需要的远不止“嬉皮士扩展”所能提供的。如果你编写 C/C++ 代码,你可以使用 ECB http://ecb.sourceforge.net/,但坦率地说,这个项目已经死了,而且这个插件不是很可靠。如果您需要非常好的智能补全,您应该尝试 Eclipse (CDT)。但是如果你编写 python 代码,那么 Emacs (rope + flymake) 和 Eclipse (PyDev) 一样好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-10
          • 2012-03-13
          • 2010-12-03
          • 2015-07-20
          • 2010-09-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多