如何在格式化时处理第一个选项卡大小?

时间:2013-09-30 21:43:10

标签: visual-studio-extensions

我使用ITextParagraphPropertiesFactoryService类以自定义方式创建扩展,即格式与编辑器选项卡。一切正常,期望事实,当用户输入新行时,ITextParagraphPropertiesFactoryService不会影响到新行

为了简化问题,我创建了一个新的MEF项目,添加像这样的格式提供程序

[Export(typeof(ITextParagraphPropertiesFactoryService))]
[ContentType("text")]
[TextViewRole(PredefinedTextViewRoles.Document)]
internal class ElasticTabstopsProvider : ITextParagraphPropertiesFactoryService
{
    /// <summary>
    /// Creates an ElasticTabstopsFormatters for
    /// the provided configuration.
    /// </summary>
    public TextParagraphProperties Create(IFormattedLineSource formattedLineSource, TextFormattingRunProperties textProperties, 
        IMappingSpan line, IMappingPoint lineStart, int lineSegment)
    {
        return new TextFormattingParagraphProperties(textProperties, 1);
    }
}

它将我的编辑器中的所有标签宽度更改为1.太棒了!这就是我要的。但是现在当我按Enter(新行)时,在Main下设置了新光标,但我希望标签宽度为1。

enter image description here

开始输入后,它会进入预期位置。

enter image description here

问题是,如何设置新行空行标签大小? 我试图覆盖ISmartIndentProvider,但似乎vs忽略该值。

Debuger在方法

中的断点处停止
int? GetDesiredIndentation(ITextSnapshotLine currentLine)
ISmartIndent

,但无论我返回什么值,缩进都保持不变...

1 个答案:

答案 0 :(得分:1)

至少有两个原因导致您的ISmartIndentProvider缩进被忽略:

首先,有许多地方使用当前的C#和VB语言服务,我们明确设置插入位置以响应某些按键。输入就是其中之一。很可能在你的场景中,我们明确地设定了位置。没有在工具中禁用智能缩进&gt;选项,没有什么可以覆盖它。既然你说你的ISmartIndentProvider中有调试器命中,这可能是问题所在。

其次,如果您尝试为内容类型“text”定义ISmartIndentProvider,如果存在特定于语言的提供程序,则不会调用您的ISmartIndentProvider。还有另一个“文本”提供者(称为已经破旧的旧语言服务),无论如何都可能赢得你的支持。

说实话,如果你想尝试做一些你不想要自动缩进的东西,那么你真的应该把它关掉以确保它不会妨碍你。