在vim中搜索并替换被选中文本的内容

时间:2018-11-16 11:30:20

标签: search vim replace clipboard

在我的vimrc中,我有一个快捷方式可以将文件名及其路径复制到剪贴板。

:nmap cp :let @* = expand("%")

这很好。现在,我想将该文本的内容替换为

1) replace \ with /  
2) remove certain words from the yanked text.

我熟悉常规文本的搜索和替换,但是当我使用快捷方式时,我不知道如何更改vimrc条目以每次在被选中的文本上执行此操作。

那么,这样的事情吗?

:nmap cp :let @* = expand("%") || %s/\\/\/ || %s/<word>//

我在Windows上使用gvim。

1 个答案:

答案 0 :(得分:6)

:substitute命令对缓冲区内容本身起作用;在这里不是那么有用。 (您可以暂时:put寄存器/文件名,将其转换,然后:delete(返回)成一个寄存器。)幸运的是,您有一个等效的低级:help substitute()函数可以应用于字符串:

:nnoremap cp :let @* = substitute(expand("%"), '\\', '/', 'g')<CR>

实际上,expand()直接支持特殊替换:help filename-modifiers,因此,这也是(相当模糊的)解决方案:

:nnoremap cp :let @* = expand("%:gs?\\?/?")<CR>

要另外删除<word>,可以使用substitute()的另一层/附加另一:gs???。我留给你。

其他批评

  • 您的映射缺少结尾的<CR>来结束命令行模式。
  • You should use :noremap;它使映射不受重新映射和递归的影响。
  • %相对于当前工作目录。如果您需要完整的绝对路径,则可以通过%:p获得。
  • c开始映射是不常规的。这里很好,因为c hange命令需要一个{motion},而p不是有效的。通常,我宁愿避免这种聪明的重载(只要您还有其他未使用的映射前缀可用)。