如何在选项卡关闭时禁用VS2013中的MRU行为

fas*_*ion 6 visual-studio visual-studio-2013

我已经将ctl + tab和ctl + shift + tab重新映射到Window.NextTab和Window.PreviousTab.

但是当我调用File.Close时,Visual Studio 2013仍然使用MRU来决定将哪个选项卡带到前台,这通常会导致焦点跳转到某个未触及的位置.我想更改此行为,以便刚刚关闭的选项卡(在选项卡中的右侧)之后的选项卡被带到前台(如果它存在).这会使VS的行为与ff,chrome,notepad ++等相匹配.

我已经尝试了一堆扩展,虽然其中许多扩展更改或创建了自己的下一个/上一个选项卡函数,但似乎没有一个扩展到File.Close的新版本.

有谁知道这是可能的还是任何扩展的身份呢?

Ser*_*sov 3

您可以使用在Visual Commander中创建的以下命令而不是 File.Close 来在关闭后激活下一个选项卡:

public class C : VisualCommanderExt.ICommand
{
    public void Run(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) 
    {
        dte = DTE;
        if (IsCommandAvailable("Window.NextTab"))
        {
            DTE.ExecuteCommand("Window.NextTab");
            DTE.ExecuteCommand("Window.PreviousTab");
        }
        if (IsCommandAvailable("File.Close"))
            DTE.ExecuteCommand("File.Close");
    }

    private bool IsCommandAvailable(string commandName)
    {
        EnvDTE80.Commands2 commands = dte.Commands as EnvDTE80.Commands2;
        if (commands == null)
            return false;

        EnvDTE.Command command = commands.Item(commandName, 0);
        if (command == null)
            return false;

        return command.IsAvailable;
    }

    private EnvDTE80.DTE2 dte;
}
Run Code Online (Sandbox Code Playgroud)

更新一个可能更好的实现,可以防止潜在的视觉副作用:

public void Run(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) 
{
    dte = DTE;
    if (IsCommandAvailable("Window.NextTab"))
    {
        EnvDTE.Window w = DTE.ActiveWindow;
        DTE.ExecuteCommand("Window.NextTab");
        w.Close();
    }
    else if (IsCommandAvailable("File.Close"))
        DTE.ExecuteCommand("File.Close");
}
Run Code Online (Sandbox Code Playgroud)