关于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可以模拟简短的键盘映射。


    推荐阅读

      linux删除第一行命令?

      linux删除第一行命令?,单位,系统,命令,标的,不了,数字,连续,名称,档案,文件,m

      linux删除本行命令?

      linux删除本行命令?,系统,本行,档案,命令,资料,商业,文件,终端,目录,文件名,L

      linux里删除区间命令?

      linux里删除区间命令?,系统,命令,情况,档案,不了,名称,目录,文件,文件夹,分

      linux命令安条件删除?

      linux命令安条件删除?,系统,命令,不了,通用,名称,文件夹,文件,目录,软件,子

      linux文件夹删除命令?

      linux文件夹删除命令?,系统,命令,不了,档案,名称,通用,文件夹,文件,目录,指

      linux删除最近命令?

      linux删除最近命令?,档案,名称,不了,命令,文件,系统,目录,文件夹,指令,参数,l

      linux快速删除命令行?

      linux快速删除命令行?,系统,软件,名称,数据,命令,文件,档案,不了,电脑,通用,l

      删除linux文件命令?

      删除linux文件命令?,名称,不了,文件夹,命令,文件,目录,方法,指令,子目录,选

      linux下删除用户命令?

      linux下删除用户命令?,系统,代码,邮箱,用户组,命令,用户,名称,管理,电脑,账

      linux的删除所有命令?

      linux的删除所有命令?,不了,系统,名称,命令,文件夹,文件,目录,档案,数据,环

      linux鼠标滚轮命令?

      linux鼠标滚轮命令?,系统,软件,位置,通用,状态,暂停,命令,终端,进程,信号,在L

      linux删除类型命令?

      linux删除类型命令?,系统,档案,命令,文件,名称,环境,数据,不了,目录,文件夹,

      linux命令删除文件夹?

      linux命令删除文件夹?,系统,名称,环境,文件夹,不了,命令,文件,数据,档案,目

      linux删除用什么命令?

      linux删除用什么命令?,档案,系统,命令,文件夹,文件,不了,名称,目录,终端,指

      linux删除用户组命令?

      linux删除用户组命令?,管理,系统,密码,电脑,名称,用户,用户组,名字,信息,工

      linux删除整行的命令?

      linux删除整行的命令?,系统,标的,数字,连续,档案,命令,光标,文件,模式,编辑,

      linux命令行怎么删除?

      linux命令行怎么删除?,系统,不了,名称,文件夹,命令,文件,档案,目录,指令,子

      删除缓存的linux命令?

      删除缓存的linux命令?,地址,系统,网络,信息,电脑,情况,服务,缓存,软件,分析,l

      linux默认命令删除?

      linux默认命令删除?,系统,软件,名称,档案,命令,文件,目录,不了,电脑,文件夹,

      linux下删除命令行?

      linux下删除命令行?,系统,数据,命令,文件,名称,百度,环境,不了,档案,文件夹,l