Vim 键盘快捷键:删除代码而不删除 if 语句



这可能是所有那些vim大师的基本vim问题。

如果我想删除特定的if语句及其右括号,但不删除表达式中的代码,如何通过一些键盘快捷键来实现这一点?

例如:

if (a == 2) {
    // do not delete this part.
    for (int i = 1; i < 10; i++) {
      // code 
    }
}

结果将是:

// do not delete this part.
for (int i = 1; i < 10; i++) {
  // code 
}

感谢您的任何帮助。

除了 Zachs 解决方案,您可以使用以下内容:

di{Vk]p

解释:

您从{ }块内开始,di{ delete inside { }块。

然后,选择要删除的 if 语句,该语句现在是两行。 Vk选择两者,然后将刚刚删除的块粘贴到上面,并带有p .]使粘贴的块正确缩进(谢谢,Kache(

粘贴部分可能有一个更优雅的解决方案,这是第一个想到的解决方案。

对 Zachs 答案的优势是,您不必将光标移动到带有if的行,您只需要在其中(尽管您可能会遇到嵌套{}块的麻烦,通常有(。此外,您无需修复缩进。

光标移动到带有 if 语句的行上的任意位置。这是命令的顺序(稍后将解释(

$%dd''.

解释

$转到行尾(光标现在位于{ 上(。

%转到匹配的大括号(或括号等(。光标现在位于 if 语句的}

dd删除光标所在的行(}现在被删除(

''转到最后一跳的线。最后一次跳跃是当我们使用% .(光标回到 if 语句行上(

. 重复上一个命令 ( dd (。这将删除该行(如果语句行现在已删除(

结果:

    // do not delete this part.
    for (int i = 1; i < 10; i++) {
        // code 
    }

缩进将关闭,因此您可以使用gg=G(正确缩进文件(来修复它。

如果你经常这样做,你可以把它映射到你的.vimrc中的一个键,或者你可以把它做成一个宏

将其制作成映射:

.vimrc 中的映射示例:

nnoremap <C-d> $%dd''.gg=G

每当您按control-d(您可以选择任何键,只需替换<C-d>(时,Vim 都会运行这些命令,执行我之前解释的操作,然后这次是整个文件缩进。使用此命令时,请确保光标位于 if 语句行上,否则可能会出现意外结果。

最新更新