我必须在vim中处理一些相对庞大的代码文件。
如何将某些操作(如find-next normal-n
和其他操作限制为某个功能/块?
我如何在视觉上知道我是否在该区域内或外面?
看起来和行号看起来很尴尬,特别是我需要使用的行号通常是5位数!
答案 0 :(得分:3)
您可以使用m
(例如ma
,mb
)在块的开头和结尾设置标记,然后在ex命令的范围内将其引用为{{{ 1}}。
与bignose said类似,您可以使用可视块为命令创建隐式区域,可以使用:'a,'b
您还可以使用正则表达式来分隔块(例如:'<,'>
和start
之间的所有行使用end
例如,要在一系列行中进行替换:
:/start/,/end/
记住最后一个视觉选择的范围,以便您可以重复使用它而无需重新选择它。
有关范围的更多信息,请参阅:'<,'>s/foo/bar/g
:'a,'bs/baz/quux/g
:/harpo/,/chico/s/zeppo/groucho/g
您可以使用:help range
进一步限制自己。例如,如果您只想在包含选定范围内的baz的行上用bar替换foo:
g//
定义新的ex命令时,可以使用:'<,'>g/baz/s/foo/bar/g
将给定的范围传递给ex命令。有关定义ex-commands的更多信息,请参阅<line1>,<line2>
。
在vimscript函数中,您可以使用:help user-commands
和a:firstline
访问隐式传递的范围。您可以使用a:lastline
检测当前的亚麻布,并使用普通布尔逻辑(line('.')
)检测您是否在块内。有关vimscript函数的更多信息,请参阅a:firstline <= line('.') && line('.') <= a:lastline
。
另一种方法是使用vim的内部:help functions
和单个i
选择器。例如,要删除双引号字符串的全部内容,请在正常模式下使用a
。要保留引号,请使用da"
。有关详情,请参阅di"
。
答案 1 :(得分:1)
答案 2 :(得分:0)
Vim使用Shift-v
按行选择。选择了一系列行后,许多命令将仅限于选择。
我不认为搜索命令(/
,n
等)会受到限制。
答案 3 :(得分:0)
对于搜索和替换等命令,您可以轻松地将自己限制为几行:
:.,+3s/foo/bar/cg
将当前行中的每个“foo”替换为“bar”,将以下3行替换为“bar”。不过,我不认为你可以为搜索做到这一点。