微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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命令对缓冲区内容本身起作用;那里没那么有用. (您可以暂时:放入寄存器/文件名,对其进行转换,然后:将其删除(返回)到寄存器中.)幸运的是,有一个等效的低级别 :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开始映射是非常规的.这里很好,因为更改命令需要{motion},而p不是有效的.一般来说,我宁愿避免这种聪明的重载(只要你还有其他未使用的映射前缀仍然可用).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐