假设我有一个这样的文档,并且我想搜索所有出现的 URL:
Vim resources: [http://example.com/search?q=vim][q]
...
[q]: http://example.com/search?q=vim
我不想完整地输入它,所以我将光标放在第一个 URL 上,然后运行"uyi[
将其拉入“u”寄存器。现在要搜索它,我想通过运行以下命令将该寄存器的内容粘贴到搜索字段中:
/\V<c-r>u<CR>
这会导致 Vim 搜索字符串 'http:' - 因为 '/' 字符终止搜索字段。
我可以通过运行以下命令来解决这个问题:
/\V<c-r>=escape(@u, '\/')<CR><CR>
但打字量很大!
如何为 Vim 命令行创建映射来简化此工作流程?
我理想的工作流程是这样的:
- press
/\V
调出搜索提示,并使用非常 nomagic 模式
- 按 ctrl-x 触发自定义映射(ctrl-x 可用)
- Vim 监听下一个按键...(按下
<Esc>
会取消)
- 按“u”将转义“u”寄存器的内容,并插入到命令行
尝试这个:
cnoremap <c-x> <c-r>=<SID>PasteEscaped()<cr>
function! s:PasteEscaped()
" show some kind of feedback
echo ":".getcmdline()."..."
" get a character from the user
let char = getchar()
if char == "\<esc>"
return ''
else
let register_content = getreg(nr2char(char))
return escape(register_content, '\/')
endif
endfunction
顺便说一句,了解一些可能有用的信息(如果您还不知道)是您可以使用?
作为分隔符:s
。这意味着您可以为 url 编写搜索和替换,如下所示:
:s?http://foo.com?http://bar.com?g
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)