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