多行粘贴(ctrl-r)到ex或用\ r来搜索|替换^ M.

时间:2018-05-07 11:21:38

标签: linux unix vim paste ex

当我将几行划线并将其粘贴到命令行时,每个新行都是\r而不是Vjy。例如,如果我以可视模式复制下两行(使用命令line1 line2 ):

/<c-r>"

并使用命令/line1^Mline2 将其粘贴到命令行(搜索)模式,我得到:

/line1\rline2

但我希望:`[v`]

我想要做的是突出显示粘贴的字符串,当我粘贴代码块时,这有用。 我知道我可以用

选择它
{{1}}

但我想只突出显示它,无论如何它可以通过将多行代码粘贴到ex中来替代或其他有趣的东西。

2 个答案:

答案 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。它提供了gcpglp等替代强制执行特定模式的内置粘贴命令的替代方法。某些变体也可以作为命令行模式映射

<C-r><C-q>映射查询分隔符字符串,然后按字符插入寄存器的内容,每行由其分隔。因此,要获得您想要的结果,应为<C-r><C-q>"\\r<CR>

注意:如果要搜索多行文本,则实际上必须使用\n而不是\r