【问题标题】:Stop intellisense session from closing prematurely阻止智能感知会话过早关闭
【发布时间】:2017-02-28 15:28:40
【问题描述】:

我创建了一个 Visual Studio 扩展,它通过继承 Microsoft.VisualStudio.Language.Intellisense.ICompletionSource 为我的领域特定语言提供智能感知。

这没问题,除了我的语言关键字中的有效字符是下划线'_'。

当智能感知弹出打开时,您可以开始输入,智能感知框的内容将被过滤以仅显示那些以您输入的内容开头的项目。

但是,如果用户键入下划线,似乎会以特殊方式处理,而不是继续过滤可用的智能感知项目列表,而是提交当前项目并结束智能感知会话。

有没有办法阻止这种行为,以便下划线可以被视为与常规字母数字字符相同?

【问题讨论】:

    标签: visual-studio-2015 visual-studio-extensions languageservice


    【解决方案1】:

    我不确定您使用的是什么语言,但在您的 Exec 方法中,听起来您正在执行类似 (c#) 的操作:

    if (nCmdID == (uint)VSConstants.VSStd2KCmdID.RETURN || nCmdID == (uint)VSConstants.VSStd2KCmdID.TAB || (char.IsWhiteSpace(typedChar) || char.IsPunctuation(typedChar))
    

    这里的原因是_被认为是标点符号,所以char.IsPunctuation(typedChar)返回true,提交当前项。

    修复 - (char.IsPunctuation(typedChar) && typedChar != '_'):

    if (nCmdID == (uint)VSConstants.VSStd2KCmdID.RETURN || nCmdID == (uint)VSConstants.VSStd2KCmdID.TAB || (char.IsWhiteSpace(typedChar) || (char.IsPunctuation(typedChar) && typedChar != '_') || typedChar == '='))
    

    仅供参考:我已通过调试此扩展 - https://github.com/kfmaurice/nla 对此进行了测试。如果没有此更改,它在键入下划线时也会提交。

    【讨论】:

      【解决方案2】:

      如果你进入工具->选项->文本 Editor->JavaScript->IntelliSense->References 应该有一个drop 参考组(取决于您的项目类型) 可能需要更改)

      一旦你有正确的组,你会注意到有一些默认值 包括智能感知参考文件。尝试删除 下划线过滤器.js

      找到这个here。让我知道这是否适合你。

      【讨论】:

        【解决方案3】:

        Visual Studio 使用了 插件链,并且其他一些插件在您的插件之前处理下划线。试试destructi6n的建议。

        【讨论】:

          猜你喜欢
          • 2016-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多