在Visual Studio 2012中向上/向下移动行快捷方式


76

在VS2010中,我有一个快捷键设置Alt+,Up/Down可以上下移动代码行,就像Java时代在Eclipse中一样。

现在,由于VS2012中不提供Power Tools和宏(这是我在VS2010中设置此快捷方式的方式),如何使它起作用?

我见过有人提到Resharper可以做到这一点,但是出于对火和水的热爱,我在可以做到这一点的命令列表中找不到命令名称。我已经尝试过ReSharper_MoveUp / MoveDown,但不会向上/向下移动行:

Move_Up命令不能解决问题

这将上下移动文本块。我只想逐行向上或向下,那里没有花哨的逻辑。之前

是)我有的

ALT+之后Up(当光标在WriteLine行上时),我想看一下:

线向上移动了一个,在支架内,缩进了

我已经看到了这些线程:Visual Studio中eclipse的ALT + UP / DOWN(移动行)等效于什么?Visual Studio:用于向上/向下移动行并在最近的更改之间移动的热键,但是VS2012中没有建议的解决方案。

还有其他想法吗?

UPD 2012年11月7日:。扩展正在赶上Visual Studio2012。现在我知道至少有3个扩展可以提供此功能:

UPD 2012年11月15日:偶然发现了另一个扩展程序,该扩展程序声称可以满足此处的要求。虽然还没有尝试过:LineMan Extension

UPD 2015年5月10日,刚刚安装了VS2015 RC,它已经内置: MoveLineUp / Down


2
FYI PowerTools 2012现已发布,现在已经有了。
卡尔·G

Answers:


34

更新:改进,Productivity PowerTools VS2012现在可用,并提供此功能(以及另一个个人收藏,Tools.AddEndTokenAtTheEnd。)

MoveLine扩展(与VS 2012兼容;我必须手动重新启动VS才能在VS的键盘快捷方式工具中查看命令。)


3
设置键盘快捷键时,将范围设置为“文本编辑器”。
Youngjae 2012年

他们成功的关键在于您的快捷方式应在“文本编辑器”范围内,并且您需要删除(删除)已分配的现有键盘快捷方式。如果您有转发器,则需要删除“ Resharper.Resharper.GoToNextMethod”和“ ..GoToPrevMethod”(请注意,可能需要删除两个快捷方式(XAML和文本编辑器)
。– kingdango

@卡尔G-有什么办法可以通过快捷方式水平移动单词吗?像Alt + Up还是Alt + Down?
Sasan K

57

对于使用Visual Studio 2013或更高版本解决此问题的人员,此功能内置在程序中。只需使用AltUpAltDown上下移动光标(或选定的行)即可。

如果要在“工具” >“选项” >“环境” >“键盘”中将其重新绑定,则按键为Edit.MoveSelectedLinesUpEdit.MoveSelectedLinesDown。您可能需要先从其他现有键中删除新组合。


问题是关于2012
。– Trailmax 2014年

20
@trailmax我知道,并且已经得到了答案,但是我发布了这个信息,以便使用2013的人们可以知道它已经存在,因此他们不会像我所必须的那样走得更远。
Keavon 2014年

@RayL也许您将那些键重新用于其他功能?
Keavon 2014年

4
@RayLEdit.MoveSelectedLinesUpEdit.MoveSelectedLinesDown。如果适合您,请向后报告。
Keavon

1
@keavon,那行得通,但由于某种原因,我无法为该命令分配“ Atl +向上箭头” ....也许与正在安装resharper或powertools有关。我认为那是最初使我困惑的原因。奇。不过,“ ctrl + alt +向上箭头”效果很好!谢谢。
RayLoveless

10

安装ReSharper。

打开工具->选项->环境->键盘(如图所示)

  1. 找到“ ReSharper.ReSharper_MoveUp”
  2. 在“在以下位置使用新的快捷方式:”中选择:“文本编辑器”
  3. 单击“按快捷键:”,然后按您的快捷方式(例如Alt + ArrowUp)
  4. 按下“分配”按钮与“ ReSharper.ReSharper_MoveDown”相同

PS适用于单行和多条选定的行,但在移动1行后删除选择。希望有一种方法可以一次选择多次移动多行。


2
不,resharper试图提供帮助,这次又推得太多。它将代码块与当前行一起移动。我想要的只是简单地上下移动一行,而不是相关的块。
Trailmax 2012年

对我来说,如果没有选择,“ ReSharper.ReSharper_MoveUp”和“ ReSharper.ReSharper_MoveDown”命令仅移动当前行,即使在块内也是如此。不知道为什么要用另一种方式。我使用MSDN的ReSharper 7.0.97.60和VS 2012 RTM。
Ivan Aksamentov-2012年

2
一个不起作用的例子是当一个using语句出现在文件的顶部,并且用户想要将该语句向下移动几行以使其位于namespace定义之内。使用R#的MoveDown命令可以正确运行几次迭代,直到该using语句显示在该namespace行的下面。现在,下一次迭代将尝试将名称空间移到其当前块下方。
卡尔·G

7

如果你有ReSharper的,那么你可以打Ctrl+ Shift+ Alt+移动当前排队。或Ctrl+ Shift+ Alt+向下移动一行。

这在Resharper 7(准确地说是7.0.97.60)中的带有Visual Studio键盘方案的VS 2012 Premium中起作用。

编辑:这映射到'ReSharper.ReSharper_MoveUp'/'MoveDown'命令。


1
由于某种原因,这对我不起作用。我有完全相同的转发器和映射相同的命令。每当我尝试向上/向下移动这些行时,它们都会以一种疯狂的方式跳跃:有时向上进入另一种方法,有时向下到下一个块下方。但不是我想要的-(
Trailmax 2012年

是的-我看到了,尽管为时已晚。您是否尝试过重置键盘映射?快捷方式可能会映射到其他命令吗?您的屏幕截图显示它已针对XAML进行了映射,您能否查看其是否也针对Text进行了映射?
YetAnotherUser 2012年

是的,确实检查了文本编辑器。实际上,我刚刚重新安装了VS2012和Resharper,它具有默认映射。您的快捷键确实有效,但不会向上或向下移动一行-向上或向下移动一个块-(
Trailmax 2012年

如果将光标放在行首/行尾代码块上,它将移动整个代码块。您是否尝试选择整行然后尝试快捷方式?
YetAnotherUser 2012年

6

在Visual Studio 2017中(至少)我有以下内容

在此处输入图片说明


它在您显示的VS2019中显示,但键未映射(至少在我的安装中)。必须手动映射键。
ΩmegaMan

2

您可以使用“移动线命令”扩展名。

只需遵循Formula349的评论:

我能够按原样与2012年一起使用。

将包重命名为.zip并将所有文件解压缩到文件夹中。编辑extension.vsixmanifest文件,然后查找SupportedProducts XML节点。将Version =“ 10.0”更改为Version =“ 11.0”。

重新压缩文件夹内容,然后重命名回.vsix。很棒!


有一个与2012兼容扩展
卡尔·G

抱歉,朱斯。我想念您的答案-假期不在,由于某种原因未收到通知。
Trailmax 2012年

2

虽然很多人似乎都建议使用杂项。在Visual Studio扩展和Resharper中,我想指出,有一个本机热键可以实现此目标。我遇到这个问题试图找到答案,因为我的Resharper用它们的MoveUp和MoveDown版本替换了默认的热键。

尽管Resharper的热键确实可以上下移动,但它们并不是原始海报所需要的,也不是我想要的。这些热键移动方法和代码块,而不是单独的行。

Visual Studio有两个热键命令,用于向上或向下移动选定的行。这些热键是:

  • Edit.MoveSelectedLinesDown
  • Edit.MoveSelectedLinesUp

但是,我使用的是Visual Studio 2013,因此我不知道这些文件是否存在于较旧的版本中。如果2012年没有这些热键,那么也许扩展是唯一的解决方案。

无论哪种方式,我都无法在Visual Studio的列表中找到确切的热键,这花了我很长时间才能找到这些,因此我希望我的解决方案能够在与我自己相似的情况下为他人提供帮助。


是的,这些在VS2012中不存在。第二个答案指出VS2013具有这些功能。
Trailmax 2014年

传教!Resharper在我目前的公司中不满意,所以我想解决它...卸载Resharper后,我所有的快捷方式都被删除了:(
Eleanor Zimmermann

1

Shift+Del然后Ctrl+V

Shift+在光标所在的当前行上Del执行剪切(与Ctrl+相同X)操作。

然后,您可以使用Ctrl+V将其粘贴到您喜欢的任何位置。

好消息是您不需要选择完整的当前行,只需将光标定位在该行上即可。

使用此快捷方式的一个缺点是,您将无法在眼前看到线条的活跃(向上或向下)移动。


0

ReSharper的上下移动快捷方式很聪明-不仅仅是移动当前行(这很容易导致代码损坏),它还将在构成方法主体的语句列表中上下移动当前语句。这比仅移动一行代码要强大得多。

但这并不能帮助您将语句放入if块内。在这里,您需要执行以下两项操作之一。

首先,移动语句以上if块,然后使用Ctrl+ Shift+ Alt+Right至将其向下推在范围内。现在,该语句将在if块内,您​​可以使用上下移动该语句。您也可以使用Ctrl+ Shift+ Alt+Left在范围之外的范围内将其上拉if

另外,您也可以将文本插入符号放在if块的右大括号之外,并使用Ctrl+ Shift+ Alt+Down向下移动大括号,从而跳过以下语句,包括它们在内的if

这些键不仅可以移动单个语句,还可以做更多的事情。如果你把一个方法或类声明的文本插入符,Up以及Down将移动整个方法或类声明上下。如果你把文本插入符号的方法的参数列表,Left并且Right将重新排列各个参数(然后Alt+Enter可以调用更改签名重构)。

帮助页面中有更多详细信息。


2
尝试成为“智能”的快捷方式是R#的问题。很多时候,我只需要向上或向下移动一条线,与示波器或大括号无关。
Trailmax

好吧,如果您对理解所询问的命令的工作方式不感兴趣,那么我无济于事。ReShaprer并非“聪明”,它了解代码的结构并正在帮助您重新安排代码。使用编辑器自己的命令来编辑纯文本。这不是ReSharper的“问题”-它为您提供了工具,您可以学习并使用它,也可以使用其他工具。
–citermatt
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.