是否有一种简单的内置方法来删除vim中块的第一行和最后一行?

是否有一种简单的内置方法来删除vim中块的第一行和最后一行?,vim,Vim,编程中相当常见的任务是删除当前块上的条件 在vim中,是否有一种简单的方法可以删除当前块的第一行(if语句)和最后一行(右大括号),并可能相应地重新插入。如果这个内置的没有简单的组合键,那么编写脚本的简单方法是什么 再进一步考虑一下,if语句的条件可能会跨越多行,因此可能需要一个脚本来完全捕获它。然而,对于我的代码来说,仅仅删除第一行和最后一行就可以捕获95%的情况。类似于di{dkk

编程中相当常见的任务是删除当前块上的条件

在vim中,是否有一种简单的方法可以删除当前块的第一行(if语句)和最后一行(右大括号),并可能相应地重新插入。如果这个内置的没有简单的组合键,那么编写脚本的简单方法是什么


再进一步考虑一下,if语句的条件可能会跨越多行,因此可能需要一个脚本来完全捕获它。然而,对于我的代码来说,仅仅删除第一行和最后一行就可以捕获95%的情况。

类似于
di{
dk
k
<2p
?或者更优雅一点,
可能的解决方案如何

yiBvaBVpgv<
ib提供了一个较短的解决方案。此解决方案不会改变可视标记:
命令!-范围=%Delete1$delete | delete_

忍不住要打一点Vim高尔夫:
diBVkpgv@ib:我喜欢
diB]pkdk
。它似乎最适合我。对
[p
的使用很好。你觉得这个怎么样:
diB“_dkP@Peter:
diB]pkdk
也不会污染标记和寄存器,除了
的“错误”位置。]
标记(它也会将边界线推到未命名寄存器,但我不认为这是一种“错误”行为)。要用
']
标记修复该缺陷,我建议使用
diB“\u dk]P
序列。@ib:
diB”_dk]P
不会有正确的缩进。无论如何,我同意你对
']
和寄存器的位置的看法,这更多是我自己的偏好,而不是“错误”。我在回答中提供了你的
diB]pkdk
解决方案。感谢你抽出时间来陪我。干杯!@Peter:使用
diB后产生的缩进的正确性“_dk]P
取决于周围的文本,因此在任何情况下都不会出错。嘿,谢谢!
nnoremap dsB yiBvaBVpgv<
diB]pkdk
command! -range=% Delete1$ <line1>delete _|<line2>delete _