代码之家  ›  专栏  ›  技术社区  ›  Ayman

如何将操作限制到特定的行?

vim
  •  1
  • Ayman  · 技术社区  · 15 年前

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

    如何限制某些操作,如查找下一个 normal-n 其他功能/模块?

    我如何从视觉上知道我是在那个街区内还是在外面?

    看着和行号似乎很尴尬,特别是我需要处理的行号一般都是5位长!

    4 回复  |  直到 15 年前
        1
  •  3
  •   Community CDub    7 年前

    您可以使用 m (例如) ma , mb )然后在ex命令的范围内引用它们 :'a,'b .

    喜欢 bignose said 可以使用可视块为命令创建隐式区域,可以使用 :'<,'>

    您还可以使用regex来分隔块(例如,对于 start end 使用 :/start/,/end/

    例如,要在一系列行中进行替换:

    :'<,'>s/foo/bar/g
    :'a,'bs/baz/quux/g
    :/harpo/,/chico/s/zeppo/groucho/g
    

    最后一个可视选择的区域会被记住,这样您就可以在不重新选择的情况下重新使用它。

    有关范围的更多信息,请参见 :help range

    您可以使用 g// . 例如,如果要用仅在选定范围内包含BAZ的行上的条替换foo:

    :'<,'>g/baz/s/foo/bar/g
    

    定义新的ex命令时,可以使用as传递给ex命令的范围 <line1>,<line2> . 见 :help user-commands 有关定义ex命令的更多信息。

    在vimscript函数中,可以使用 a:firstline a:lastline . 您可以使用 line('.') ,并使用普通布尔逻辑检测您是否在块内( a:firstline <= line('.') && line('.') <= a:lastline )见 :help functions 有关vimscript函数的更多信息。


    另一种方法是使用Vim的内部 i 和单人间 a 选择器。例如,要删除双引号字符串的全部内容,请使用 da" 在正常模式下。要保留引号,请使用 di" . 见 :help object-select 更多信息。

        2
  •  1
  •   theosp    15 年前
        3
  •  0
  •   bignose    15 年前

    VIM使用 Shift-v 按行选择。选择了一系列行后,许多命令将被限制在选择范围内。

    我不认为搜索命令( / , n 等等),但也受到限制。

        4
  •  0
  •   Tomislav Nakic-Alfirevic    15 年前

    对于搜索和替换之类的命令,您可以轻松地将自己限制为几行:

    :.,+3s/foo/bar/cg
    

    将当前行中出现的每一个“foo”替换为“bar”,并将以下3行替换为“bar”。不过,我认为你不能在搜索中那样做。