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