【问题标题】:Autocompletion restriction in certain region of file in vimvim中某些文件区域的自动完成限制
【发布时间】:2014-07-29 18:34:39
【问题描述】:

假设我们有一个这样的 xml 文件:

<tag1>
somthing here
</tag1>
<tag2>
somthing here
</tag2>
<region>
autocomplete here
</region>

每当光标在区域标签内时,我希望自动完成 c-nc-x c-l 仅限于一些自定义选项,例如:

c-n:

myword1, myword2, myword3, myword4

c-x c-l:

myline1
myline2
myline3
myline4

有可能吗?

python 中的解决方案将是首选。

【问题讨论】:

    标签: python autocomplete vim


    【解决方案1】:

    是的,自定义完成函数可以做到这一点。

    固定值取决于位置

    Vim 对一组固定的单词 cp 有字典补全:help i_CTRL-X_CTRL-K。要根据位置配置不同的集合,:autocmd CursorMoved,CursorMovedI 可以更改底层的'dictionary' 选项。

    或者,您可以编写自定义完成函数,如 :help complete-functions 下的 CompleteMonths() 示例。

    动态值取决于 Vim 范围

    我的CompleteHelper plugin 使编写自定义完成变得非常容易。使用像\%l 这样的正则表达式原子,您可以限制找到匹配项的范围。插件页面有几个用它编写的自定义完成的链接。

    动态值取决于 XML 结构

    为了仅从某些 XML 标记中获取匹配项,我们正在从常规文本编辑转向类似 IDE 的功能。您可能需要一个外部 XML 解析器(因为通过正则表达式解析 XML 是 not possible),然后可以按照上面给出的自定义完成函数的配方进行操作。

    【讨论】:

    • 不错。我怎样才能让 c-x c-k 尊重set infercase
    • 我认为这不可能。
    • 好的。我正在考虑在区域标签中放置一对 {} 并稍后将其删除,它有助于位置识别吗?我仍然不知道如何使用 cursormoved 来达到这个目的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    相关资源
    最近更新 更多