如何在vim脚本中替换光标下的单词?

时间:2011-12-23 12:39:53

标签: vim

使用expand("<cWORD>")获取当前单词并处理结果字符串后,我正在尝试用它替换当前单词。

我该怎么做?

编辑 已添加来源。我是用python写的。

cur_word = vim.eval('expand("<cWORD>")')
parts = cur_word.split('.')
if parts:
    obj, accesses = parts[0], parts[1:]
    result = obj + ''.join("['%s']"%a for a in accesses)
    # how do I replace the current word with result?

2 个答案:

答案 0 :(得分:4)

修改

看起来你想要这个:

viW
:s/\%V\.\(\w\+\)\%V/\="['" . submatch(1) . "']"/g

例如,对于以下文本,curosr在第二行:

x = a.get.property;
x = a.git.another.property;   # cursor on the first letter 'e'

结果将是

x = a.get.property;
x = a['git']['another']['property'];

你可能想要你

  1. 一句话,然后
  2. 移动光标(您未提及)
  3. _用以前被扯过的单词替换光标下的单词?
  4. 那将是

    ý w ^      (移动光标)       v w ^ P

    所以例如:

     the lazy cow mooned over the racy hump
     cursor here:   ----> +        
    

    现在,做 y i W (猛拉内部WORD), F a (回到:)

     the lazy cow mooned over the racy hump
      --> +        
    

    现在, v i W p 取代当前的WORD:

     the over cow mooned over the racy hump
        --> +
    

答案 1 :(得分:1)

在Vim的python界面中,您可以执行普通模式命令,在您的情况下,

  vim.command("normal BcW%s" % result)

会做到这一点。