【问题标题】:Multiline paste (ctrl-r) into ex or search|replace ^M with \r多行粘贴 (ctrl-r) 到 ex 或搜索|用 \r 替换 ^M
【发布时间】:2018-10-17 04:34:51
【问题描述】:

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

line1
line2

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

/line1^Mline2

但我期待:/line1\rline2

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

选择它
`[v`] 

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

【问题讨论】:

    标签: linux unix vim paste ex


    【解决方案1】:

    在可视模式下复制下一段:

    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") 将查找未命名寄存器(:help quotequote)中的每个^M,将其替换为\r,并将输出字符串存储在p 中。要在命令行中粘贴p 的内容,请使用&lt;c-r&gt;=p

    【讨论】:

    • 像伤害一样工作。非常感谢。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-06
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 2019-01-03
      • 2018-11-16
      相关资源
      最近更新 更多