如何限制某些行的操作?

时间:2010-03-30 07:20:21

标签: vim

我必须在vim中处理一些相对庞大的代码文件。

如何将某些操作(如find-next normal-n和其他操作限制为某个功能/块?

我如何在视觉上知道我是否在该区域内或外面?

看起来和行号看起来很尴尬,特别是我需要使用的行号通常是5位数!

4 个答案:

答案 0 :(得分:3)

您可以使用m(例如mamb)在块的开头和结尾设置标记,然后在ex命令的范围内将其引用为{{{ 1}}。

bignose said类似,您可以使用可视块为命令创建隐式区域,可以使用:'a,'b

将其传递给ex命令

您还可以使用正则表达式来分隔块(例如:'<,'>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-commandsa: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”。不过,我不认为你可以为搜索做到这一点。

相关问题