Visual studio 2010 如何在EditPoint.AbsoluteCharOffset的iTextEdit中找到等效位置
我试图在VisualStudio2010扩展中使用新的文本编辑器代码模型删除类主体。也就是说,我正在尝试使用ITextEdit上的Delete方法删除花括号之间的所有内容 我可以使用Visual studio 2010 如何在EditPoint.AbsoluteCharOffset的iTextEdit中找到等效位置,visual-studio-2010,vs-extensibility,Visual Studio 2010,Vs Extensibility,我试图在VisualStudio2010扩展中使用新的文本编辑器代码模型删除类主体。也就是说,我正在尝试使用ITextEdit上的Delete方法删除花括号之间的所有内容 我可以使用 codeClass.GetStartPoint(vsCMPart.vsCMPartBody).CreateEditPoint().AbsoluteCharOffset 及 编解码器类接口上的方法。如果我随后从当前IWpfTextViewHost的ITextBuffer获取ITextEdit,然后尝试删除: iTe
codeClass.GetStartPoint(vsCMPart.vsCMPartBody).CreateEditPoint().AbsoluteCharOffset
及
编解码器类接口上的方法。如果我随后从当前IWpfTextViewHost的ITextBuffer获取ITextEdit,然后尝试删除:
iTextEdit.Delete(startCharOffset, endCharOffset - startCharOffset);
删除不正确。在旧模型上的AbsoluteCharOffset和新文本模型中的位置之间似乎没有1:1的映射
我如何在这两个模型之间进行交互
提前感谢您的帮助。AbsoluteCharOffset返回的值实际上不是绝对字符偏移量,尽管\r\n可能是您的文件使用的值。进行转换的最佳方法是获取行号和列偏移量,可能是一种辅助方法,如:
SnapshotPoint SnapshotPointFromEditPoint(EditPoint editPoint, ITextSnapshot snapshot)
{
int lineNumber = editPoint.Line - 1;
int offset = editPoint.LineCharOffset - 1;
return snapshot.GetLineFromLineNumber(lineNumber).Start + offset;
}
几个月前,我刚刚从Dev10中的一个性能问题中了解到这一点,在Dev10中,计算绝对CharOffset非常昂贵。我建议尽量避免使用它,因为AbsoluteCharOffset返回的值实际上不是绝对字符偏移量,即使\r\n可能是文件使用的值。进行转换的最佳方法是获取行号和列偏移量,可能是一种辅助方法,如:
SnapshotPoint SnapshotPointFromEditPoint(EditPoint editPoint, ITextSnapshot snapshot)
{
int lineNumber = editPoint.Line - 1;
int offset = editPoint.LineCharOffset - 1;
return snapshot.GetLineFromLineNumber(lineNumber).Start + offset;
}
几个月前,我刚刚从Dev10中的一个性能问题中了解到这一点,在Dev10中,计算绝对CharOffset非常昂贵。我建议你尽量避免去任何地方