-5

编辑:这个问题被标记为“托尔斯泰”,以感谢我写作的质量和长度:) 只需阅读第一段和最后一段就足够了:) 如果你倾向于用鼠标选择和移动代码,那么里面的东西中间对你来说可能很有趣。

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

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

如果(真){\n
\t int i = 1;\n
\t <i *= 2;>\n
\ti += 3;\n
}\n

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

你最终得到:

如果(真){\n
\t int i = 1;\n
\ti += 3;\n
}\n

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

通常在使用 Visual Studio 和其他编辑器时,这是目前最适合我的解决方案:

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

如果(真){\n
\t int i = 1;<\n
\ti *= 2;>\n
\ti += 3;\n
}\n

现在按退格键,您可以一次性删除该行,而无需删除任何其他字符。这同时适用于几条连续的线。此外,它还可用于转置行。您可以将尖括号之间的选择拖动到用插入符号标记的点:

如果(真){\n
\t int i = 1;<\n
\ti *= 2;>\n
\ti += 3;^\n
}\n

这给你留下了:

如果(真){\n
\t int i = 1;\n
\ti += 3;<\n
\ti *= 2;>\n
}\n

其中第 3 行和第 4 行交换了位置。

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

如果(真){\n
\t int i = 1;\n
<\ti *= 2;\n
>\ti += 3;\n
}\n

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

也许这种方法对其他人也很有用,即使它只是让他们知道在选择/删除文本时如何处理换行符:) 它适用于大多数非专业文本编辑器。但是,鉴于 Visual Studio 的大量功能和插件(我使用最多),我确信有更好的方法来使用它来删除和移动代码行。在不同块之间移动代码时自动获得正确的缩进会很好(即不点击“格式化文档/选择”)。我期待着建议;请不要对微优化大喊大叫:)


答案摘要

关于 Visual Studio:用光标键很好地导航。

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

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

4

11 回答 11

4

在 Emacs 中:

  • 杀伤线CK
  • 转置线 Cx Ct

Ca Ck Ck - 杀死包括换行符在内的整行(或kill-whole-line通过 CS-退格)。

Cu <number> Ck -- 杀死 <number> 行(包括换行符)。

Cy -- 拉回最近删除的文本(又名粘贴)

于 2008-09-13T17:08:00.077 回答
4

在 VIM 中:

  • 删除包括换行符在内的整行:dd
  • 转置线:dd p

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

10 dd

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

:10,15d

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

:10,15m20

或者您可以复制以下行:

:10,15t20
于 2008-09-13T17:22:16.220 回答
3

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

于 2008-09-13T17:35:25.547 回答
2

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

于 2008-09-13T17:18:04.280 回答
1

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

  • ...到段落结尾(通常意思是“到下一个空白行”):d}
  • ...包含光标的行和接下来的 5 行:d5j
  • ...一组括号、大括号等及其内容:d%(光标位于开始或结束括号/大括号/等上)
  • ...到单词“foo”的第三次出现:d3/foo

它非常灵活。

于 2008-09-29T06:30:13.497 回答
1

学习使用光标键。

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

  1. 使用/移动到要复制的行。
  2. Home如果还没有,请点击,如果将光标放在空格之后,请再次点击。
  3. 然后按Shift+选择要移动的行(或行)
  4. Ctrl+X切断线路。
  5. 向上/向下移动到要插入的行
  6. Ctrl+V

这应该适用于 Windows 上的几乎所有文本编辑器。

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

(虽然我发现他们在我使用 Mac 的情况下迷失方向,但我认为 Apple 可能已经对他们设置 Home/End 的方式有所了解,在 Mac 上跳过单词快捷方式)

于 2008-09-13T17:33:49.687 回答
0

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

  • 要杀死一行:三次单击它,然后右键单击两次

  • 要杀死多行:三次单击第一行,然后右键单击最后一行(“first”行可以在“last”行之后-“first”在这里表示您单击的第一个)

于 2013-12-18T03:07:25.923 回答
0

使用简要键盘映射,这是使用Alt+L标记行和-数字键盘上的键(或Alt+D)将行剪切到剪贴板来完成的。剪切将完全删除该行,包括换行符。

Ins数字键盘上的键会将行放回文档中,包括换行符。

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

PS:我认为 MSVC 可以选择模拟简要键盘映射。

于 2008-09-18T03:37:19.030 回答
0

除了上述之外,使用Resharper for Visual Studio 来做你想做的事。你会发现的最好的 VS 插件。它提供了一堆不同的命令来帮助在这里和任何地方移动/删除/复制代码。更不用说重构/生成/等代码了。

Ctrl- Shift-Alt 将向上或向下移动方法,向上或向下移动等 Shift- Del- 删除当前行,但将其放在剪贴板中(除非您修改设置不这样做 - 我试图回忆如果这是一个 VS 标准快捷方式,而不仅仅是 Resharper - 太长了)。 Ctrl- C, Ctrl-X不选择复制/剪切当前行。一直在……

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

于 2008-09-29T06:00:59.167 回答
0

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

于 2011-04-06T11:41:25.103 回答
0

在 Eclipse 中,我使用CTRL+D删除多行的单行(或几行),我将使用鼠标或SHIFT+选择它们,ARROW然后按下DEL键。

于 2008-09-22T19:13:51.560 回答