我创建了一个Visual Studio扩展,通过继承Microsoft.VisualStudio.Language.Intellisense.ICompletionSource,为我的特定于域的语言提供智能感知。
除了我的语言的关键字中的有效字符是下划线'_'之外,这没关系。
当intellisense弹出打开时,您可以开始输入,并且智能感知框的内容将被过滤,以显示那些以您键入的内容开头的项目。
但是,如果用户键入下划线,似乎以特殊方式处理,而不是继续过滤可用的智能感知项列表,它会提交当前项并结束智能感知会话。
有没有办法停止此行为,以便可以将下划线视为与常规字母数字字符相同?
答案 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建议。