如何快速编辑不同类似行内的确定部分代码

时间:2013-11-23 10:51:35

标签: vim editor editing

我有这个问题我调整了代码我已经制作了这样的结构:

Apple1 = Fruit("ss","ss",[0.1,0.4],'w')
PineApple = Fruit("ss","ss",[0.315,0.4],'w')
Banana = Fruit("ss","ss",[0.315,0.280],'w')
...
...

而不是"ss"我想输入更多信息,例如"Golden Delicious"。目前我只是删除"ss"点击它,然后将其替换为我要插入的信息。我确信有一种更快的方法可以做到这一点,我已经尝试过使用VIM宏,但我无法弄清楚如何" Raw输入"我的数据。 我只是试着用Spyder代替它,但是很慢,因为我每次都必须点击替换,因为我尝试的VIM是相同的。 然后我想知道在'w'之后如何插入其他东西...... 这是最终输出的一个例子,只是为了更好地理解这个问题:

  Apple1 = Fruit("Golden Delicous","red",[0.1,0.4],'w')
  PineApple = Fruit("Ananas comosus","green",[0.315,0.4],'w')
  Banana = Fruit(" Cavendish banana","yellow",[0.315,0.280],'w')
  ...
  ...

我重新提出了一个问题:改变"ss"的速度更快,目前我点击了" ss"延迟" ss"并写下例如" Golden Delicous"但是很慢。我想要的是每一个 ss编辑要求我插入一些内容来替换单ss

e.g。在第一行中的第一个ss:我想替换它输入其他内容,例如" Golden Delicous"第一行中的第二个ss我要替换它,输入somethingelse,例如red。第二行中的第一个ss我想用s.e替换它。例如第二行Ananas comosusss我要用s.e替换。例如green等等。

我确定在某个地方有一个答案,但我无法找到它! 请你投票给我解释为什么我可以改进它!

3 个答案:

答案 0 :(得分:3)

据我了解,您想要替换“ss”的数据没有常规结构,因此您需要手动输入。

在Vim你会这样做:

  1. 将光标放在第一个“ss”上,然后按*,然后按N
  2. ce,输入新数据(例如“Golden Delicious”),然后按Escape退出插入模式。
  3. n跳转到“ss”的下一个实例。
  4. 随意重复步骤2和3。

    查看:h *:h n以获取更多信息。

答案 1 :(得分:3)

我会这样做:

:%s/ss/\=input('Replacement: ')/gc

这会查询您每次出现的情况。使用/c标志,显示甚至在循环期间更新(代价是每次出现时必须另外回答y);没有国旗,你需要跟踪你自己的位置。

答案 2 :(得分:1)

您可以使用一个搜索整个文件的函数,用所有"ss"个字符串替换填充了替换数据的数组中的值:

function! ChangeSS()
    let ss1 = ['Golden Delicous', 'Ananas comosus', 'Cavendish banana']
    let ss2 = ['red', 'green', 'yellow']

    call cursor(1, 1)
    let l = "ss2"
    while search('"ss"', 'W') > 0 
        if l == "ss1"
            let l = "ss2"
        else
            let l = "ss1"
        endif
        execute 'normal ci"' . remove({l}, 0)
    endwhile
endfunction

它使用一个引用变量(l)来交换要从中提取数据的数组。 ss1首先出现在"ss"行,ss2出现在第二行。{/ p>

像以下一样运行:

:call ChangeSS()

那(在我的测试中)产生:

Apple1 = Fruit("Golden Delicous","red",[0.1,0.4],'w')
PineApple = Fruit("Ananas comosus","green",[0.315,0.4],'w')
Banana = Fruit("Cavendish banana","yellow",[0.315,0.280],'w')