关于Visual Studio:在文本编辑器中删除代码行

关于Visual Studio:在文本编辑器中删除代码行

Deleting lines of code in a text editor

编辑:这个问题被标记为"托尔斯泰",以感谢我的写作质量和长度:)仅阅读第一和最后一段就足够了:)如果您倾向于使用鼠标选择和移动代码,中间可能对您很有趣。

这个问题是关于您一般如何使用文本编辑器的。我正在寻找删除多行代码的最佳方法(无意申请专利:)这扩展到转置行,即删除并将它们添加到其他地方。最重要的是,我不想创建任何必须单独删除的空白行。有点像Visual Studio的SHIFT + DELETE功能,但可同时处理多行。

假设您要从以下代码中删除第3行(标签和换行符也可视化)。天真的方法是在尖括号之间选择文本:

1
2
3
4
5
6
7
8
9
if (true) {

\t int i = 1;

\t <i *= 2;>

\t i += 3;

}

然后按退格键。这将创建一个空行。再按两次退格键删除 t和 n。

您最终得到:

1
2
3
4
5
6
7
if (true) {

\t int i = 1;

\t i += 3;

}

当您尝试选择整行时,Visual Studio不允许您选择结尾的换行符。例如,将光标放在一行上并按SHIFT + END不会在末尾选择换行符。如果您使用鼠标,也不会选择换行符,即单击一行的中间并将光标一直拖动到最右边。仅当选择至少跨越两行时,才选择结尾的换行符。我使用的大多数编辑器都是这样做的。 Microsoft WordPad和Word是反示例(在其中删除文本时,我经常会出现换行错误;至少Word可以显式显示行尾和段落末尾字符)。

一般而言,在使用Visual Studio和其他编辑器时,以下是目前最适合我的解决方案:

使用鼠标,选择放在尖括号之间的字符:

1
2
3
4
5
6
7
8
9
if (true) {

\t int i = 1;<

\t i *= 2;>

\t i += 3;

}

现在点击退格键,即可一次性删除该行,而不必删除任何其他字符。这一次可用于多个连续行。另外,它可以用于换位线。您可以将尖括号之间的选择拖动到插入符号标记的点:

1
2
3
4
5
6
7
8
9
if (true) {

\t int i = 1;<

\t i *= 2;>

\t i += 3;^

}

这使您拥有:

1
2
3
4
5
6
7
8
9
if (true) {

\t int i = 1;

\t i += 3;<

\t i *= 2;>

}

第3和第4行已切换位置。

这个主题有很多变化。当您要删除第3行时,您还可以选择以下字符:

1
2
3
4
5
6
7
8
9
if (true) {

\t int i = 1;

<\t i *= 2;

>\t i += 3;

}

实际上,如果您告诉Visual Studio选择完整的行,这就是Visual Studio所做的。通过单击代码和红色圆圈指示断点的列之间的边距来执行此操作。鼠标指针在该区域进行了镜像,以更好地区分它,但是我认为它太窄了,并且在物理上与我要选择的代码相距太远。

也许这种方法对其他人也很有用,即使它只是使他们知道选择/删除文本时如何处理换行符:)对于大多数非专业的文本编辑器来说,它也很好用。但是,鉴于Visual Studio的大量功能和插件(我最常使用),我相信有更好的方法来使用它删除和移动代码行。在不同块之间移动代码时自动正确地使缩进效果很好(即无需点击"设置文档格式/选择格式")。我期待提出建议;请勿进行微优化,请:)

答案摘要

关于Visual Studio:使用光标键进行良好导航。

最适合我的代码遍历和编辑风格的解决方案是Eclipse方式:

您可以选择几行连续的代码行,其中第一行和最后一个选定的行可能仅被部分选择。按下ALT + {up,down}上下移动整行(不只是所选内容),随行固定缩进。按CTRL + D可以完全删除行(而不仅仅是所选内容),而不会留下任何不需要的空白行。我很想在Visual Studio中看到这个!


在VIM中:

  • 删除包括换行符的整个行: dd
  • 转置行: dd p

您始终可以在任何命令前添加数字以重复该命令,因此要删除10行,请执行以下操作:

1
10 dd

您还可以指定要删除的行范围。例如,要删除第10-15行:

1
:10,15d

或者,您可以移动这些行,例如,将第10-15行移动到第20行以下:

1
:10,15m20

或者,您可以复制以下行:

1
:10,15t20

在Emacs中:

  • 杀线C-k
  • 转置线C-x C-t

C-a C-k C-k-杀死包括换行符在内的整行(或C-S-backspace的kill-whole-line)。

C-u C-k-杀死行(包括换行符)的

C-y-撤消最近杀死的文本(又名粘贴)


我要做的是,从光标开始于行的开头(在某些编辑器中,您必须按两次home键才能执行此操作),按住shift键并向下按,直到选中了要删除的所有行。然后我按删除。


在Eclipse中,您可以ALT-ALT-移动一行。我发现此功能以及复制行的ALT-SHIFT- {}都非常有用。此外,它不会破坏剪贴板。随着行的移动,它甚至可以纠正缩进!


添加到现有的vim答案中,您可以将d与任何光标移动命令一起使用,以从光标的当前位置删除到新位置。例如,删除...

  • ...到段落末尾(通常意思是"到下一个空白行"):d}
  • ...包含光标的行和接下来的5行:d5j
  • 一组括号,大括号等及其内容:d%(光标放在开头或结尾的括号/括号/等上)
  • ...到" foo"一词的第三个出现:d3 / foo

非常灵活。


学习使用光标键。

对于移动线,请执行以下操作:

  • 使用 / 移至要复制的行。
  • 如果尚未将Home击中,则将其击中;如果将光标置于空格之后,请再次击中。
  • 然后按Shift + 选择要移动的一条或多条线
  • Ctrl + X剪切线。
  • 上/下移至您要插入的行
  • Ctrl + V
  • 这几乎可以在Windows上的所有文本编辑器中使用。

    当删除行时,我仍然倾向于使用Ctrl + X(尽管我猜我也使用退格键),因为上面的内容在我的编辑方式中根深蒂固,并且也更加宽容。

    (尽管我发现使用Mac时他们会迷失方向,但我认为Apple可能在设置Home / End时采用了某些方法,在Mac上跳过了单词快捷键)


    在Emacs中,除了C-k(和带有数字前缀arg的C-k,以杀死N行)之外,您还可以使用鼠标:

    • 杀死一条线:三击它,然后右击两次

    • 要杀死多行,请执行以下操作:三次单击第一行,然后右键单击最后一行("第一行"可以在"最后一行"之后-"第一行"表示您单击的第一行)


    Ctrl + Shift + L删除行而不将其复制到缓冲区。


    除上述内容外,请使用Resharper for Visual Studio进行所需的操作。您将找到的最佳VS插件。它提供了许多不同的命令,可帮助您在此处和各处移动/删除/复制代码。更不用说重构/生成/等代码。

    Ctrl-Shift-Alt or 将向上或向下移动方法,向上或向下排列等。
    Shift-Del-删除当前行,但将其放置在剪贴板中(除非您修改设置以不执行此操作-我试图回顾这是否是VS标准快捷方式,而不仅仅是Resharper-太长了)。
    Ctrl-CCtrl-X,而不选择复制/剪切当前行。
    等等……

    有关完整列表,请参见http://www.jetbrains.com/resharper/docs/ReSharper40DefaultKeymap2.pdf。


    在Eclipse中,我使用CTRL + D删除一行(或两行)
    对于许多行,我将使用鼠标或SHIFT + ARROW选择它们,然后按DEL键。


    使用简短的键盘映射,可以使用Alt + L标记该行,并使用数字键盘上的-键(或Alt + D)将其剪切到剪贴板。剪切将完全删除该行,包括换行符。

    在数字小键盘上击中Ins键会将该行放回包含换行符的文档中。

    恕我直言,摘要是一个设计精良的键盘映射。

    PS:我认为MSVC可以模拟简短的键盘映射。


    推荐阅读