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

Search and replace contents of yanked text in vim

在我的 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。

: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 开始映射是非常规的。这里没问题,因为 change 命令需要 {motion},而 p 不是有效的。一般来说,我宁愿避免这种聪明的重载(只要你还有其他未使用的映射前缀仍然可用)。