【问题标题】:Search and replace contents of yanked text in vim在 vim 中搜索和替换被抽出的文本的内容
【发布时间】:2019-04-19 14:10:47
【问题描述】:

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

【问题讨论】:

    标签: search vim replace clipboard


    【解决方案1】:

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

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

    事实上,expand() 直接支持一个特殊的替换 :help filename-modifiers,所以这也是一个(相当模糊的)解决方案:

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

    对于&lt;word&gt;的额外删除,您可以使用另一层substitute()/附加另一层:gs???。我会把它留给你。

    补充评论

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

    【讨论】:

    • 谢谢您的好心先生!我使用了替代和扩展。它工作正常。替代(expand("%:gs?\\?/?"),'','','g') 感谢您的批评。我也修好了。
    猜你喜欢
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多