我想在我的配置文件中删除以下代码:
server {
listen 80;
server_name xxx;
location / {
try_files xx;
}
}
我知道我可以使用7dd,但这不够方便 - 如果该部分太长,计算行数会很不方便。
有一个更好的方法吗?
有时,我必须删除整个函数,有什么想法吗?
和 Vim 一样,有很多方法!
请注意,前两个解决方案取决于块中没有空行。
如果您的光标在该server
行上,请尝试d}. 它将删除下一个块的所有内容。
在条目本身内,dap将删除“段落”。
您可以使用 删除大括号块da}。(如果你喜欢这种语法,我推荐 Tim Pope 的出色的环绕.vim,它添加了更多具有类似感觉的功能)。
您也可以尝试使用正则表达式删除,直到下一个最左缩进的右花括号:d/^}Enter
]]并[[移动到下一个/上一个第一列花括号(相当于使用/
and?
与我上面提到的那个正则表达式。结合d运动,你会得到相同的效果。
如果你在一个块之下,你也可以利用 Vim 搜索的方便的“偏移”特性。d?^{?-1将向后删除到第一次出现第一列左花括号之前的一行。这个命令输入起来有点棘手。也许你可以用<leader>
它做一个捷径。
请注意,这个答案大部分取自我之前就类似主题给出的答案。
如果这些行之后有一个空行,Vim 会将其识别为一个段落,因此您可以简单地使用d}
删除它(假设光标在第一行)。
尝试使用带有 % 的可视模式。
例如,假设您的光标位于“服务器”行的开头。
按 v 进入可视模式。按 % 突出显示到块的末尾。按 d 将其删除。
给定匹配的括号或大括号,您可以使用%
withd
删除跨越行。
因此,假设您server {
在线,您可以执行d%
. 这通常对所有代码块有用,例如功能块、循环块、尝试块。
同样,dip
有效,但d}
更短。但是,两者都只会删除到下一个空行。
正如大卫所说,他们有很多方法。这里有几个我喜欢的:
Vf{%d
这假设您在线 w/server
并且您进行了视觉线选择,找到{
然后}
通过%
命令找到匹配项。set relativenumber
或set rnu
简称。这会打开相对于光标的行号。因此,您不必计算行数,只需查看并7dd
移开即可删除您的块。VaB
直观地选择一个块,即{
到}
,逐行。在仍处于可视模式时继续执行aB
,直到选择正确的块然后执行d
。这意味着您可以从块内部而不是在开始或结束处选择块。d}
将删除一个段落。这适用于您当前的场景,因为块内没有空行。如果有一个,那么所有的赌注都是关闭的。虽然您可以继续按.
直到块被正确删除。[{
如果在一个块内,您可以通过then 继续执行跳转到当前块,[{
直到您位于正确的块然后V%d
或d%dd
删除该块使用上述技术,您也可以删除一个函数,但您也可以使用[M
和朋友 ( [m
, ]m
, ]M
) 跳转到方法的开头和结尾,但它们通常也适用于函数。
了解更多信息
:h %
:h 'rnu'
:h aB
:h }
:h .
:h [{
:h [m