在单个Visual Studio会话中打开文件的两个实例


554

我有一个文件xyz.cpp。我想在Visual Studio中打开此文件的两个实例(顺便说一句,我正在使用Visual Studio 2005)。我为什么要这样做?我想并排比较同一文件的两个部分。我知道解决方法,例如:

  1. 复制文件。但是问题在于它并不优雅,而且我不想每次都遇到这种情况就制作副本。

  2. 我可以将窗口分成两部分。我只能将其水平拆分的拆分问题。水平分割的结果是屏幕的右半部分是空白。

如果我能够垂直拆分它或打开同一文件的两个实例,那么它将增加我可以比较的代码行数。


12
如果只想比较文件的各个部分,则可以使用Window | 分割将从中间水平分割文件。
vexe

@vexe完美。正是我所需要的。分割窗口,两个窗口都编辑相同的文件。
Vincent P

3
有什么原因您没有接受投票最高的答案?
cp.engr

1
@ cp.engr,来自他的个人资料:“最后查看时间为09年12月6日,12:41”。可惜的是,高级用户无法将答案标记为已接受。
琼斯医生

Answers:


903

这是怎么做的...

  1. 选择您想要两个副本的标签
  2. 从菜单中选择菜单窗口新窗口
  3. 右键单击新选项卡,然后选择新建垂直选项卡组

如果* Window菜单中未列出New Window,请注意该命令确实存在,即使从Visual Studio 2017开始也是如此。使用菜单ToolsCustomizeCommands将其添加到Window菜单中。。此时,决定将“ 新窗口”命令放在何处,然后选择“ 添加命令”

已更新的“2018年7月30”

在Visual Studio Code版本1.25.1和更高版本中

方式1

您可以在侧面板(浏览器)中简单地左键单击文件,然后按 Ctrl + Enter

方式2

只需在Visual Studio Code侧面板(浏览器)中右键单击您的文件,然后选择向侧面打开的第一个选项。


50
如果您有一些可用的屏幕空间(如第二个监视器),则还可以将新选项卡拖出Visual Studio并在第二个监视器中看到它。
Artur Carvalho 2010年

4
您只能对某些文件类型执行此操作,例如,不能在同一.xaml文件上打开两个窗口。这真是令人讨厌,因为那是我想要做的!
cplotts 2011年

4
@ Shlomi.A。试试卢克的答案
Jason S

2
对于WPF中的XAML,“新窗口”选项不存在。
Preza8

2
此方法有效,但是在我的VS 2010上,快捷方式[Ctrl] [Shift] [N]已绑定到“文件”>“新建”>“项目”
user1556435 '16

67

对于Visual Basic,HTML,JScript和RDL表达式,PaulB的答案中Window > New Window提到的选项被禁用。但是,可以在注册表中更改一个选项以启用菜单项。

所有其他语言不限于单个代码窗口,因此您可以使用PaulB的答案而无需编辑注册表。

在Windows注册表中启用新窗口。[ 1 ] [ 2 ]

  1. 转到下面的注册表项。这个例子是针对Basic(Visual Basic)的,但是对于HTML,JScript和RDL Expression也是如此。

    • 64位操作系统: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Languages\Language Services\Basic
    • 32位操作系统: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Languages\Language Services\Basic
  2. 查找值,Single Code Window Only然后执行以下操作之一:

    • 设置为0
    • 重命名值
    • 删除值(请谨慎!)

这将启用“新窗口”菜单项,但在菜单中可能仍不可见。

添加菜单项

要实际看到“新窗口”菜单项,我必须将其重新添加到菜单中:

  • 工具>自定义...>命令>添加命令...
  • 选择“菜单栏”,然后在下拉菜单中选择“窗口”菜单
  • 添加命令...>窗口>新窗口>确定

恢复注册表值
将其复制粘贴到记事本,另存为.reg文件,然后将文件导入注册表以恢复初始设置。

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ VisualStudio \ 10.0 \ Languages \ Language Services \ Basic]
“仅单个代码窗口” = dword:00000001

无需编辑C#文件的注册表,因为应该已经为C#文件启用了“新建窗口”菜单项(在VS 2010中)。您只需要对VB,HTML或JScript执行此操作。根据此MS Connect问题报告,此问题已为VB修复,您只需删除或重命名注册表项即可启用该功能。
詹森·S

1
我也很高兴地在Visual Basic 2010 Express中也可以使用。注册表项略有不同:[HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ Microsoft \ VBExpress \ 10.0 \ Languages \ Language Services \ Basic]。
罪魁祸首

对我不起作用。尝试重新启动VS2010,将在重新启动计算机后给它另一个机会...(谁知道注册表项的读取/存储/更新方式)
Mars Robertson 2012年

我刚刚测试了一下(我猜我的注册表项被更新或其他内容所覆盖)。我不需要重启。我在VS2010运行时更改了密钥,“新窗口”仍然显示为灰色。然后关闭VS2010,然后打开VS2010,可以使用“新窗口”。
卢克·霍夫曼

3
在VS2010中,翻转JScript的注册表位的确允许为JavaScript文件打开第二个选项卡(是的),但是在每个选项卡中都没有呈现白色的东西(布尔值)。
G-Wiz

18

打开文件(如果使用多个选项卡组,请确保已选择文件)。

菜单窗口拆分 (或者,在编辑器的垂直滚动条上方有一个小块-抓住并向下拖动)

这为您提供了同一文件的两个(水平)视图。请注意,任何编辑操作都将同时反映在两个视图上。

完成后,抓住分离器并将其完全拖动(或菜单窗口移除分离)。


2
(Sri:抱歉,视图的行中的“水平”是对齐的,或者一个视图在另一个视图上方)。AFAIK,垂直(并排)视图是不可能的。

7
似乎没有读过OP,他提到自己很清楚这件事。
詹森·S



9

卢克的答案对我没有用。尽管删除了注册表设置,“新窗口”命令已在自定义设置中列出,但未显示在.js选项卡的上下文菜单中。

所以我用了:

工具类

定制...

键盘...

向下滚动以选择Window.NewWindow

然后,我按下并分配了快捷键Ctrl+ Shift+ W

那对我有用。

====编辑====

好吧,“努力”太强了。我的键盘快捷键确实的确打开了同一JavaScript文件上的另一个选项卡,但无助地它没有呈现内容。这只是一个空白的窗口!您可能会有更好的运气。


3
谢谢。这对我来说对VS2012 / VB.net有用。打开的工具-选项-(在环境下)键盘-从下拉列表中选择Visual Basic 6-从命令列表中选择Window.NewWindow-按下Ctrl + N,Ctrl + W
CodingSlayer

8

打开文件后,转到命令窗口(菜单视图其他Windows命令窗口,或仅Ctrl+ Alt+ A

类型:

Window.NewWindow

然后

Window.NewVerticalTabGroup

为我工作(Visual Studio 2017)。

或使用菜单:

菜单窗口新窗口

菜单窗口新的垂直点击组


你做了上议院与我儿子的工作。谢谢。
安德鲁


3

使用Visual Studio 2013和VB.NET时,我发现您可以轻松自定义菜单并添加“新窗口”命令-无需弄乱注册表!

上帝只知道为什么微软选择不包括某些语言的命令...?


为我轻松工作!菜单工具 > 自定义。然后在“ 命令”选项卡中,在第一个下拉菜单中选择“ 窗口 ”,然后单击“ 添加命令”按钮,然后开始!(Visual Studio 2019)
cyberponk

3

对于较新的版本(例如Visual Studio 2017)

  • 选择要复制的窗口。
  • 转到窗口选项卡,然后单击列表顶部的split。
  • 完成后,再次单击它以将其关闭。

3
分为两半的窗口与两个窗口不同。
Tipx

1

对于文件类型,在垂直选项卡组中无法打开相同文件的情况(例如.vb文件),可以

  • 打开2个不同的Visual Studio实例
  • 在每个实例中打开相同的文件
  • 调整IDE窗口的大小,并排放置以实现布局。

但是,如果在一个实例中保存到磁盘,则在切换到另一个实例时必须重新加载文件。另外,如果您在两个实例中都进行了编辑,则必须在第二次保存时进行解析。在这两种情况下,Visual Studio都会用各种选项提示您。如果仅在一个实例中进行编辑,则将简化您的生活。


@Odrade-您能为我指出适用于所有类型文件的正确答案吗?
Gishu 2011年

@Jason Ok,但指出不能多次打开同一文件进行并排比较仍然是不正确的。显然,至少对于.cs文件,这是可能的。
奥德拉德(Odrade)2011年

@Odrade你是对的。我已进行编辑以尝试更正此问题。如果您想删除基于先前版本的注释,请告知您。
詹森·S

@Odrade尝试Luke的答案这比为VB用户打开两个VS实例要好得多,我对此表示赞同。
杰森S

这似乎是html文件的唯一可行的解​​决方法,其中注册表编辑仅给出了空白的第二个窗口
Chris F Carroll

1

我没有Visual Studio 2005的副本,但是此过程适用于Visual Studio 2008:

  1. 打开xyz.cpp以及其他文件。
  2. 右键单击选项卡标题,然后选择新的垂直选项卡组。
  3. 左键单击第一个选项卡组中的另一个文件。
  4. 再次通过解决方案资源管理器打开xyz.cpp。

现在,您应该在单独的垂直选项卡组中有两个文件实例。


在我的VS2K5和VS2K8上,它仅在第二个选项卡中为我显示了原始实例。这是如果我在解决方案资源管理器中双击,从文件资源管理器中拖放,或通过文件| 打开菜单。
Simeon朝圣者

@Simeon-如果没有其他文件打开(步骤1的第二部分),则发生这种情况
si618

它知道在另一个选项卡组中打开了原始文件。也许这再次与它允许复制的文件有关。
neoswf 2011年

0

我想出了一种可能会产生原始答案中预期结果的hack。

如果您在源代码管理的两个窗口中都有所需的文件,则可以右键单击该文件并选择“比较”,然后可以比较

如果您进行比较,将会有一个名为diff的新窗口,向您显示文件的内容。

这当然不是理想的,因为差异窗口将使差异颜色污染文本。注意:您可以将要打开的文件与空白文件进行比较,然后将窗口显示为非常难看的绿色背景。

这并不完美,这是一个hack,但这是我发现在两个窗口中确实拥有相同文件的唯一方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.