【问题标题】:Tab completion like in Textmate?像 Textmate 中的 Tab 补全?
【发布时间】:2011-11-07 21:09:03
【问题描述】:

我希望能够像在 Textmate 中一样在 Vim 中使用制表符补全。

像这样。

  • 运行<Tab> 应该在当前文档中的单词之间切换,从最接近的单词开始。
  • 建议应内嵌显示,而不是列表。

如果它在当前文件中没有单词的情况下可以循环遍历字典中的单词,那就太好了。

我目前正在使用supertab,是否可以对其进行调整以满足我的需求?

这是我的 vimrc 文件中的相关代码。

function! Tab_Or_Complete()
  if col('.')>1 && strpart( getline('.'), col('.')-2, 3 ) =~ '^\w'
    return "\<C-N>"
  else
    return "\<Tab>"
  endif
endfunction
inoremap <Tab> <C-R>=Tab_Or_Complete()<CR>
set dictionary="/usr/share/dict/words"

【问题讨论】:

    标签: vi vim


    【解决方案1】:

    让我们说清楚。

    在 TextMate 中点击 &lt;tab&gt; 根本不提供单词补全,它会触发 sn-ps 的扩展。

    点击&lt;Esc&gt;会触发使用当前文件内容的单词补全。

    半智能代码完成可以由当前活动的包提供,最常见的是使用&lt;Alt&gt;&lt;Esc&gt;

    这是三种类型的完成,具有三种不同的快捷方式和三种截然不同的 UI 和行为。

    现在站在 Vim 一边……

    一些插件(SnipMate、SnippetEmu…)旨在提供相当于 TextMate 的 &lt;Tab&gt; 扩展系统。

    单词补全由称为“插入模式补全”(:help ins-completion) 的内置功能提供,并通过点击 &lt;C-n&gt;&lt;C-p&gt;&lt;C-x&gt;&lt;C-k&gt; 从字典中补全来触发。

    代码完成由称为“全方位完成”(:help new-omni-completion) 的内置功能提供,并通过点击 &lt;C-x&gt;&lt;C-o&gt; 触发。

    我认为您不想模仿 TextMate 的 &lt;Tab&gt; 扩展或执行代码完成。

    这给我们留下了混合

    • &lt;C-n&gt;&lt;C-p&gt; 以完成当前缓冲区中的单词
    • &lt;C-x&gt;&lt;C-k&gt; 从您的字典中完成

    【讨论】:

    • 使用&lt;C-n&gt;时是否可以隐藏自动补全列表?
    • 您还可以使用 abrev 命令添加缩写,在键入空格或制表符等“非单词”时扩展为完整形式。
    猜你喜欢
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2015-08-06
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多