Inv*_*rch 3 vim clipboard search replace
在我的vimrc中,我有一个快捷方式来复制文件名及其路径到剪贴板.
:nmap cp :let @* = expand("%")
Run Code Online (Sandbox Code Playgroud)
这很好用.现在,我想将此抽出的文本的内容替换为
1) replace \ with /
2) remove certain words from the yanked text.
Run Code Online (Sandbox Code Playgroud)
我熟悉常规文本的搜索和替换,但是当我使用快捷方式时,我不知道如何更改我的vimrc条目以便每次在被拉动的文本上执行此操作.
那么,这样的事情呢?
:nmap cp :let @* = expand("%") || %s/\\/\/ || %s/<word>//
Run Code Online (Sandbox Code Playgroud)
我在windows上使用gvim.
该:substitute
命令适用于缓冲区内容本身; 那里没那么有用.(您可以暂时:put
使用寄存器/文件名,将其转换,然后将其转换:delete
回寄存器.)幸运的是,有一个等效的低级:help substitute()
函数可以应用于字符串:
:nnoremap cp :let @* = substitute(expand("%"), '\\', '/', 'g')<CR>
Run Code Online (Sandbox Code Playgroud)
事实上,expand()
直接支持特殊替换:help filename-modifiers
,所以这也是一个(相当模糊)的解决方案:
:nnoremap cp :let @* = expand("%:gs?\\?/?")<CR>
Run Code Online (Sandbox Code Playgroud)
对于额外删除<word>
,您可以使用substitute()
/追加另一层:gs???
.我会留给你的.
<CR>
结束命令行模式.:noremap
; 它使映射不受重映射和递归的影响.%
是相对于当前工作的目录.如果你需要完整的绝对路径,你可以通过它获得%:p
.c
是非常规的.这里很好,因为c
hange命令需要a {motion}
,而p
不是有效的.一般来说,我宁愿避免这种聪明的重载(只要你还有其他未使用的映射前缀仍然可用). 归档时间: |
|
查看次数: |
112 次 |
最近记录: |