编辑: 此问题已被标记为“托尔斯泰”,感谢我写作的质量和篇幅:)只需阅读第一段和最后一段应该足够了:)如果您倾向于使用鼠标选择并移动代码,那么中间的内容可能会让您感兴趣。
这个问题是关于如何使用文本编辑器的。我正在寻找删除多行代码的最佳方式(无意申请专利:)这扩展到转置行,即删除并添加它们到某处其他。最重要的是,我不想创建任何空白行,我必须单独删除。类似于Visual Studio的SHIFT + DELETE功能,但同时适用于多行。
假设您要从以下代码中删除第3行(标签和新行也可视化)。天真的方法是选择尖括号之间的文字:
if (true) {\n \t int i = 1;\n \t <i *= 2;>\n \t i += 3;\n }\n
然后点击退格键。这会创建一个空行。再次按退格键两次以删除\ t和\ n。
你最终得到:
if (true) {\n \t int i = 1;\n \t i += 3;\n }\n
当您尝试选择整行时,Visual Studio不允许您选择尾随换行符。例如,将光标放在一行上并按SHIFT + END将不会在结尾处选择换行符。如果您使用鼠标,也不会选择换行符,即单击一行中间并将光标一直拖到右侧。如果进行跨越至少两行的选择,则只选择尾随换行符。我使用的大多数编辑都是这样做的; Microsoft WordPad和Word是反例(我在那里删除文本时经常会出现新行错误;至少Word有办法显式显示行尾和段落结尾字符。)
一般情况下使用Visual Studio和其他编辑器时,这是目前最适合我的解决方案:
使用鼠标,我选择放在尖括号之间的字符:
if (true) {\n \t int i = 1;<\n \t i *= 2;>\n \t i += 3;\n }\n
现在点击退格键,您可以一次性删除该行,而无需删除任何其他字符。这适用于几个连续的线路。另外,它可以用于移调线。您可以将尖括号之间的选择拖动到标有插入符号的点:
if (true) {\n \t int i = 1;<\n \t i *= 2;>\n \t i += 3;^\n }\n
这会让你:
if (true) {\n \t int i = 1;\n \t i += 3;<\n \t i *= 2;>\n }\n
第3行和第4行已经转换。
这个主题有不同之处。如果要删除第3行,还可以选择以下字符:
if (true) {\n \t int i = 1;\n <\t i *= 2;\n >\t i += 3;\n }\n
实际上,如果您告诉它选择一个完整的行,这就是Visual Studio的功能。您可以通过单击代码与红色圆圈所在的列之间的边距来指明断点。鼠标指针在该区域中进行镜像,以便将其区分得更好,但我认为它太窄了,并且在物理上与我想要选择的代码相差太远。
也许这种方法对其他人也很有用,即使它只是让他们知道在选择/删除文本时如何处理新行:)它适用于大多数非专业文本编辑器。但是,鉴于Visual Studio(我最常用)的大量功能和插件,我确信有更好的方法可以使用它来删除和移动代码行。在不同块之间移动代码时自动获得缩进是很好的(即没有点击“格式文档/选择”)。我期待着建议;没有关于微优化的咆哮,请:)
答案摘要
关于Visual Studio:使用光标键导航。
最符合我修改和编辑代码风格的解决方案是 Eclipse 方式:
您可以选择多行连续的代码行,其中可以仅部分选择第一行和最后一行。按ALT + {向上,向下}可上下移动整行(不仅仅是选择),随时修改缩进。点击CTRL + D会完全删除这些行(不仅仅是选择)而不会留下任何不需要的空行。我很想在Visual Studio中看到这个!
答案 0 :(得分:4)
在Emacs中:
C-a C-k C-k - 杀死整行,包括换行符(或C-S-backspace的kill-whole-line
)。
C-u&lt; number&gt; C-k - kill&lt; number&gt; (包括换行符)。
C-y - 收回最近被杀的文字(又称粘贴)
答案 1 :(得分:4)
在VIM中:
dd
Transpose lines: dd p
Transpose lines: dd p
或者你可以复制这些行:
:10,15t20
答案 2 :(得分:3)
我所做的是,从行开头的光标开始(在某些编辑器中你必须按两次才能执行此操作),按住shift并按下直到选中我要删除的所有行。然后我按删除。
答案 3 :(得分:2)
在Eclipse中,您可以 ALT - ↓或 ALT - ↑来移动一条线。我发现这非常有用,以及 ALT - SHIFT - {↓,↑}复制一行。此外,它不会破坏您的剪贴板。它甚至会在线条移动时纠正缩进!
答案 4 :(得分:1)
学习使用光标键。
对于移动线,我执行以下操作:
这应该适用于Windows上的几乎任何文本编辑器。
当删除行时,我仍然倾向于使用 Ctrl + X (虽然我想我也使用退格键)因为上面是如此根深蒂固的我如何编辑,它是也更宽容。
(虽然我发现它们在我使用Mac的时候会迷失方向,但我认为Apple可能已经采用了他们设置Home / End的方式,在Mac上跳过单词快捷方式)
答案 5 :(得分:1)
添加到现有的vim答案,您可以使用d和任何光标移动命令从光标的当前位置删除到新位置。例如,要删除...
非常灵活。
答案 6 :(得分:0)
使用简要键盘映射,使用 Alt + L 来标记线条和数字键盘上的 - 键(或 Alt + D )来切断线到剪贴板。剪切将完全删除该行,包括换行符。
点击数字小键盘上的 Ins 键会将该行重新放回包含换行符的文档中。
恕我直言简短是一个设计精良的键盘映射。
PS:我认为MSVC可以选择模拟Brief键盘映射。
答案 7 :(得分:0)
我使用 CTRL + D 来删除一行(或一对) 对于很多行,我会用鼠标或 SHIFT + ARROW 选择它们,然后按 DEL 键。
答案 8 :(得分:0)
除了上述内容之外,使用Resharper为Visual Studio执行您想要的操作。你会发现最好的VS插件。它提供了许多不同的命令,可以帮助在那里和任何地方移动/删除/复制代码。更不用说重构/生成/等代码了。
Ctrl - Shift - Alt ↑或↓会移动方法向上或向下,排队或向下等 Shift - Del - 删除当前行,但将其放入剪贴板(除非您将设置修改为不执行此操作 - 我正在尝试回忆这是否是VS标准快捷方式,不仅仅是Resharper - 太长了)。 Ctrl - C , Ctrl - X 而不选择复制/剪切当前行。 等等...
有关完整列表,请参阅http://www.jetbrains.com/resharper/docs/ReSharper40DefaultKeymap2.pdf。
答案 9 :(得分:0)
Ctrl + Shift + L 删除行而不将其复制到缓冲区。
答案 10 :(得分:0)
在Emacs中,除了C-k
(以及带有数字前缀arg的C-k
,要杀死N行),您只需使用鼠标:
要杀死一行: 三击它,然后右击两次
要杀死多行: 三击第一行,然后右键点击最后一行(“第一行”可以在“最后“行 - ”第一个“这里意味着你点击的第一个”