Visual Studio 2010没有“合并行”键盘快捷方式吗?

21

Visual Studio 2010没有"连接行"的键盘快捷方式吗?

编辑 - 换句话说,当我在任何一行上(例如第X行)按下快捷键后,第X+1行会加入到第X行中(消除它们之间的回车换行符)。


你的意思是什么?删除行首/行尾将合并两行。你在想做什么? - Graham Perks
那就是当我在任何地方的X行时,按下快捷键一次,然后X+1行将加入到X行(可以说是消除它们之间的回车符)。 - Greg
@Greg- 看起来你的三个相同的评论需要合并而不是连接。 :-) - Ray
我不会为你做所有的工作,但你可以研究一下VsVim如何实现J运算符来连接行。 - Mark Rushakoff
7个回答

19

虽然这不完全符合您的要求,但我认为它仍然很有用。

如果您在第一行末尾,请按Ctrl+Del以连接下一行并删除它们之间的任何空格。

您仍然需要在该行末尾,但这将适用于几乎所有编辑器,无需进行任何修改。


16

我使用CodeMaid扩展程序来实现此功能,它提供了Ctrl + M Ctrl + J快捷键来合并行(还有其他一些有用的功能)


5
据我所知,它并没有这个功能。
但是,您可以使用以下代码创建和保存新的VS宏:
Sub JoinLines()
    DTE.ActiveDocument.Selection.EndOfLine()
    DTE.ExecuteCommand("Edit.Delete")
    DTE.ActiveDocument.Selection.EndOfLine()
End Sub

为它分配一个键盘快捷方式(如CTRL+j

此代码将当前行与其下面的一行合并。


我认为他想要将下面的行与之合并,这意味着你可以删除宏的前两行。 - Gabe
假设他问这个问题是因为他使用vim,你实际上想要的是:EndOfLine,删除,插入一个空格(我想),向左移动一个字符。 - Noah Richards
这看起来不错 - 只是在尝试在VS2010中弄清楚如何将键盘分配给JoinLines子方法时卡住了... - Greg
@Greg- 工具 -> 选项 -> 环境 -> 键盘。在“显示包含命令”的文本字段中,只需键入“JoinLines”,您的新宏就会显示出来。然后在“按快捷键”中键入“Ctrl + j”,单击“分配”,最后单击“确定”。之后应该就可以正常使用了。 - Ray
宏在Visual Studio 2012/2013中不受支持:https://dev59.com/dWct5IYBdhLWcg3wetUo - northben
如何在VS Code中创建宏? - mylord

2
如果您希望加入功能的操作类似于 Vim(按下 Shift + J),则可以使用此宏,它会连接、插入空格并将光标放置在空格后面:
Sub JoinLines()
    Dim textSelection As TextSelection = DTE.ActiveDocument.Selection
    With textSelection
        .EndOfLine()
        .Insert(" ")
        .Delete(1)
    End With
End Sub

只需将其分配给类似于 Alt + J 的组合键(因为 Ctrl + JCtrl + Shift + J 已被占用)。


2

微软Visual Studio Professional 2019(我使用的版本为16.8.4)现在内置了一个快捷方式,太棒了!
它是shift+alt+ L然后是shift+alt+ J
我记得这个快捷键时想到了Lines(L)- Join(J)(可能是J...L但好吧,我认为它们是分组的)
此功能可在菜单编辑 ->高级 ->合并行中找到


1
请注意,自v16.8.5以来,以下操作可能会产生奇怪的行为和随机的不良行为:
  1. 被连接的行的最后一个字符会被随机删除,有时会删除多个字符(仅适用于旧版);
  2. 如果光标位于行末,则在连接后光标会移动到下一行(如果要进行多个连接,则非常麻烦)。
- Metalskin

1

我之前一直在使用CodeMaid,但是它在处理大文件时非常缓慢。为了模仿CodeMaid的行为,我将Ray Vega和javs的解决方案结合起来,得到了以下代码:

    Sub JoinLines()
      DTE.ActiveDocument.Selection.EndOfLine()
      DTE.ExecuteCommand("Edit.WordDeleteToEnd")
      DTE.ActiveDocument.Selection.Insert(" ")
    End Sub

注意: 由于VS2013中已经取消了宏,因此我使用Visual Commander扩展,因此宏实际上看起来更像:
Imports EnvDTE
Imports EnvDTE80
Imports Microsoft.VisualBasic

Public Class C
  Implements VisualCommanderExt.ICommand

  Sub Run(DTE As EnvDTE80.DTE2, package As Microsoft.VisualStudio.Shell.Package) Implements VisualCommanderExt.ICommand.Run
    DTE.ActiveDocument.Selection.EndOfLine()
    DTE.ExecuteCommand("Edit.WordDeleteToEnd")
    DTE.ActiveDocument.Selection.Insert(" ")
  End Sub
End Class

0

尝试使用 End 键,然后再使用 Delete 键。

End 键可以移动到行末,Delete 键可以删除光标后的行尾符号。


这个答案忽略了一个重要的事实,即您想删除任何前导空格的第二行,这是 Visual Studio 等效于 Vim 的 j 键所需的。 - tpartee
这将复制空格(从下一行缩进到我们要连接的行。因此会有额外的空格。 - Santosh Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接