c# - VS2010扩展性: Custom document formatting

标签 c# visual-studio visual-studio-2010 visual-studio-extensions

下午好,

我创建了一个 Visual Studio 包,它将 Verilog 语言注册为有效的内容类型。

语法高亮、大纲、智能缩进等功能都可以正常工作。

但是,我希望能够让 Visual Studio 通过 Edit->Advanced->Format Document/Selection 自动格式化整个文档。 。目前这些选项是不可见的,我希望我必须让 VS2010 知道(以某种方式)可以调用这些方法,并提供正确的方法来执行此格式化。

我似乎在 VS2010 SDK 和文档中找不到任何关于格式化的引用。我希望ISmartIndent将是我一直在寻找的解决方案,但似乎此代码仅在空行上运行,或者在按下回车键时运行。

有人对我如何解决这个问题有任何建议或想法吗?

谢谢

吉瓦

编辑:我正在使用 VS2010 引入的托管扩展框架来完成此任务。我正在用 C# 编写(并且刚刚将 c# 标签添加到我的问题中)。谢谢

最佳答案

MEF 不是完成创建语言服务任务的正确方法。相反,应该使用托管包框架(MPF)来注册语言服务并执行语法突出显示、大纲、解析、格式化、解析等任务。

由于我的问题是关于格式的,因此我将在回答中介绍一些内容。您必须覆盖 ReformatSpan自定义方法Source您为语言服务创建的对象。 MSDN webpages for VS2005 上有一个很好的例子(同样适用于VS2010)。

您还可以随时通过直接调用 ReformatSpan 方法强制格式化。这是我的代码中的一个工作示例:

Region region = service.GetRegionContainingLine((line > 0 ? line - 1 : 0));

if (region != null)
{
    using (EditArray mgr = new EditArray(this, service.LastActiveTextView, true, "Reformat Brace"))
        this.ReformatSpan(mgr, region.ToSpan());
}

感谢@James McNellis为我指明了正确的方向。

关于c# - VS2010扩展性: Custom document formatting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6768282/

相关文章:

c++ - 如何使用 Visual Studio 2010 创建 C++ MSI 自定义操作 DLL?

visual-studio-2010 - 从托管 c++ 中免费调用 FFMPEG avframe

c++ - OpenCV 配置问题

c# - csla 验证错误 : Insert is an Invalid Operation

c# - 如何根据属性合并两个列表?

c# - IIS 6.0可以像tomcat一样显示服务器状态吗

asp.net - 重新编译asp.net网站时如何重新启动IIS站点

c# - Lambda 不能做 Int16 比较?

c# - 类库中的 HttpContext.GetGlobalResourceObject 始终为 null

windows - Git 管理的文件中出现外来字符