停止intellisense会话提前结束

时间:2017-02-02 10:14:53

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

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

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

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

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

有没有办法停止此行为,以便可以将下划线视为与常规字母数字字符相同?

3 个答案:

答案 0 :(得分:4)

我不确定您使用的语言是什么,但在您的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对此进行了测试。如果没有这个改变,它也会在输入下划线时提交。

答案 1 :(得分:2)

  

如果您进入工具 - >选项 - >文字   编辑器 - > JavaScript-> IntelliSense->参考文献应该有一个删除   下来参考组(取决于您的项目类型)   可能需要改变这个)

     

一旦你拥有了合适的团队,你会注意到有一些默认   包括intellisense参考文件。尝试删除   underscorefilter.js

找到了here。如果这对您有用,请告诉我。

答案 2 :(得分:2)

visual studio使用插件链,其他一些插件在插件之前处理下划线。请尝试destructi6n建议。