当我将几行划线并将其粘贴到命令行时,每个新行都是\r
而不是Vjy
。例如,如果我以可视模式复制下两行(使用命令line1
line2
):
/<c-r>"
并使用命令/line1^Mline2
将其粘贴到命令行(搜索)模式,我得到:
/line1\rline2
但我希望:`[v`]
我想要做的是突出显示粘贴的字符串,当我粘贴代码块时,这有用。 我知道我可以用
选择它{{1}}
但我想只突出显示它,无论如何它可以通过将多行代码粘贴到ex中来替代或其他有趣的东西。
答案 0 :(得分:2)
以可视模式复制下一段:
line1
line2
line3
并在命令行中粘贴它(使用<c-r>"
)应该给line1^Mline2^Mline3^M
。如果您希望此文本为line1\rline2\rline3\r
,则可以定义以下函数并映射:
function! Substitute()
silent! let g:p=substitute(@", "\\n", "\\\\r", "g")
call feedkeys(":", 'n')
endfunction
nnoremap <silent> : :call Substitute()<cr>
命令let g:p=substitute(@", "\\n", "\\\\r", "g")
将找到未命名寄存器(^M
)中的每个:help quotequote
,将其替换为\r
,并将输出字符串存储在p
中。要在命令行中粘贴p
的内容,请使用<c-r>=p
。
答案 1 :(得分:1)
我经常需要将注册内容“广播”到某种(字符/行/块)模式,为此我写了UnconditionalPaste plugin。它提供了gcp
,glp
等替代强制执行特定模式的内置粘贴命令的替代方法。某些变体也可以作为命令行模式映射。
<C-r><C-q>
映射查询分隔符字符串,然后按字符插入寄存器的内容,每行由其分隔。因此,要获得您想要的结果,应为<C-r><C-q>"\\r<CR>
。
注意:如果要搜索多行文本,则实际上必须使用\n
而不是\r
。