0

当我拉几行并将其粘贴到命令行时,每一个新行^M都是\r. 例如,如果我在可视模式下复制接下来的两行(使用 command Vjy):

line1
line2

/<c-r>"并使用我得到的命令将其粘贴到命令行(搜索)模式:

/line1^Mline2

但我期望:/line1\rline2

我想要做的是突出显示粘贴的字符串,这在我粘贴代码块时很有帮助。我知道我可以选择它

`[v`] 

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

4

2 回答 2

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")查找 every ,将其替换为,并将输出字符串存储在. 要在命令行中粘贴内容,请使用.^M:help quotequote\rpp<c-r>=p

于 2018-05-07T20:58:33.537 回答
1

我经常需要将寄存器内容“转换”为某种(按字符/按行/按块)模式,为此我编写了UnconditionalPaste 插件。它为强制某种模式的内置粘贴命令提供了 、 等替代方案gcpglp一些变体也可用作命令行模式映射

映射查询分隔符字符串,然后<C-r><C-q>按字符插入寄存器的内容,每一行由它分隔。所以,要达到你想要的结果,那就是<C-r><C-q>"\\r<CR>.

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

于 2018-10-09T10:07:47.137 回答