如何在gvim中选择相似的文本并修改它们?

时间:2015-03-20 13:43:32

标签: vim

如何选择从第4行开始的所有文本以foo_list开头(参见下面的代码)并用list_values或任何其他首选名称重命名它们?请注意,我不想在第一行更改。

提前致谢!

foo_list = [5, 2, 3, 1, 4]

def reverse_list_1():
    foo_list=[0,10,20,40]
    for i in reversed(foo_list):
        print i,
    foo_list=[0,10,20,40]
    print foo_list[::-1]
    for i in reversed(foo_list):
        print i,
    length = len(foo_list)
    for i in range(length):
        print foo_list[length-i-1],

优先解决方案: .vimrc或.gvimrc文件中的键映射,不想使用任何插件。

4 个答案:

答案 0 :(得分:1)

这是:substitute的工作。您可以使用显式行号指定范围(此处:4到缓冲区$的结尾,或者可能是下一个空行/^$/):

:4,$substitute/\<foo_list\>/list_values/g

您也可以先移至第一行并使用.,$范围。

由于仍然需要输入很多内容,您可以通过{{1}将当前单词(假设您首先将光标置于第4行的foo_list出现位置)拉入命令行}。

或者,对于插件解决方案,我的ChangeGlobally plugin提供了避免使用<C-R><C-W>的映射。

答案 1 :(得分:0)

:%s/foo_list/list_values/gc

此命令说明在整个文档中将foo_list替换为list_values,每次都要求确认。然后,对于第1行第一次出现foo_list,按n(表示“否”),然后按y(表示“是”)以进行所有进一步的更换。当您必须替换几个单词时,此解决方案有效。您可以按如下方式阅读命令:

在整个文档(%)中,用s替换foo_list单词list_values并全局执行此操作(g),要求确认(c)每次。有关替换命令中的更多选项,请在vim中输入:help :s

解决方案2:

当需要替换数千个单词时,您肯定不希望每次都输入y / n确认(由上述命令中的c标志启用)。 将光标移至第4行并运行

:.,$s/foo_list/list_values/g

从此处(.)读取上述命令到文件末尾(,$) 将s替换为foo_list list_values 全球(g)。

答案 2 :(得分:0)

对于这样的小改动,我喜欢使用gn动作。 gn运动可视地选择当前搜索模式。在将gn动作与更改c,运算符和重复命令.组合时,这会产生强大的搜索/替换方法。

基本步骤:

  • 使foo_list成为您的搜索模式。例如/foo_list或通过*
  • 使用cgn更改第一个foo_list。例如cgnbar_list<esc>
  • 现在通过.
  • 重复对下一个搜索结果的更改
  • 使用n前进到下一个搜索结果。 (按两次n跳过一次)
  • 继续使用n.直至完成

这个主题有一个很好的Vimcasts集:Operating on search matches using gn

有关详细信息,请参阅:

:h gn

答案 3 :(得分:0)

:替代是'正确'的方式,但是如果你只做了一些改变,并且你对ex命令不是很有经验,那么通常需要花费更长的时间来思考命令而不是反复通过更改列表你想使用动作。

如果你从第一个foo_list实例开始,点击'*'跳转到文件中的下一个实例。按“ce”删除到单词的末尾并进入插入模式。输入新的变量名称并返回正常模式。现在,您可以使用“n”跳转到文件的其余部分以跳转到下一个匹配项(或“N”返回)和“。”重复上一次编辑操作。