6

我想在我的配置文件中删除以下代码:

server {
    listen 80;
    server_name xxx;
    location / {
        try_files xx;
    }
}

我知道我可以使用7dd,但这不够方便 - 如果该部分太长,计算行数会很不方便。

有一个更好的方法吗?

有时,我必须删除整个函数,有什么想法吗?

4

5 回答 5

7

和 Vim 一样,有很多方法!

请注意,前两个解决方案取决于块中没有空行。

  • 如果您的光标在该server行上,请尝试d}. 它将删除下一个块的所有内容。

  • 在条目本身内,dap将删除“段落”。

  • 您可以使用 删除大括号块da}。(如果你喜欢这种语法,我推荐 Tim Pope 的出色的环绕.vim,它添加了更多具有类似感觉的功能)。

  • 您也可以尝试使用正则表达式删除,直到下一个最左缩进的右花括号:d/^}Enter

  • ]][[移动到下一个/上一个第一列花括号(相当于使用/and?与我上面提到的那个正则表达式。结合d运动,你会得到相同的效果。

  • 如果你在一个块之下,你也可以利用 Vim 搜索的方便的“偏移”特性。d?^{?-1将向后删除到第一次出现第一列左花括号之前的一行。这个命令输入起来有点棘手。也许你可以用<leader>它做一个捷径。

请注意,这个答案大部分取自我之前就类似主题给出的答案。

于 2012-08-07T06:34:47.053 回答
6

如果这些行之后有一个空行,Vim 会将其识别为一个段落,因此您可以简单地使用d}删除它(假设光标在第一行)。

于 2012-08-07T06:09:47.953 回答
2

尝试使用带有 % 的可视模式。

例如,假设您的光标位于“服务器”行的开头。

按 v 进入可视模式。按 % 突出显示到块的末尾。按 d 将其删除。

于 2012-08-07T06:06:13.483 回答
1

给定匹配的括号或大括号,您可以使用%withd删除跨越行。

因此,假设您server {在线,您可以执行d%. 这通常对所有代码块有用,例如功能块、循环块、尝试块。

同样,dip有效,但d}更短。但是,两者都只会删除到下一个空行。

于 2012-08-07T06:18:09.600 回答
1

正如大卫所说,他们有很多方法。这里有几个我喜欢的:

  1. Vf{%d这假设您在线 w/server并且您进行了视觉线选择,找到{然后}通过%命令找到匹配项。
  2. set relativenumberset rnu简称。这会打开相对于光标的行号。因此,您不必计算行数,只需查看并7dd移开即可删除您的块。
  3. 用于VaB直观地选择一个块,即{},逐行。在仍处于可视模式时继续执行aB,直到选择正确的块然后执行d。这意味着您可以从块内部而不是在开始或结束处选择块。
  4. d}将删除一个段落。这适用于您当前的场景,因为块内没有空行。如果有一个,那么所有的赌注都是关闭的。虽然您可以继续按.直到块被正确删除。
  5. [{如果在一个块内,您可以通过then 继续执行跳转到当前块,[{直到您位于正确的块然后V%dd%dd删除该块

使用上述技术,您也可以删除一个函数,但您也可以使用[M和朋友 ( [m, ]m, ]M) 跳转到方法的开头和结尾,但它们通常也适用于函数。

了解更多信息

:h %
:h 'rnu'
:h aB
:h }
:h .
:h [{
:h [m
于 2012-08-07T16:39:10.210 回答