多行粘贴 (ctrl-r) 到 ex 或搜索|将 ^M 替换为 \r
Multiline paste (ctrl-r) into ex or search|replace ^M with \r
当我提取几行并将其粘贴到命令行时,每一行都是 ^M
而不是 \r
。例如,如果我在可视模式下复制下两行(使用命令 Vjy
):
line1
line2
并使用命令 /<c-r>"
将其粘贴到命令行(搜索)模式,我得到:
/line1^Mline2
但我预计:/line1\rline2
我想做的是突出显示粘贴的字符串,当我粘贴代码块时有什么用。
我知道我可以 select 它与
`[v`]
但我只想突出显示它,无论如何它可以通过将多行代码粘贴到 ex 中来替代或其他有趣的东西来使用。
正在以可视模式复制下一段:
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
,并将输出字符串存储在[=19=中].要在命令行中粘贴 p
的内容,请使用 <c-r>=p
.
我经常需要 "cast" 将内容注册到某种(按字符/按行/按块)模式,我为此编写了 UnconditionalPaste plugin。它提供了 gcp
、glp
等替代强制特定模式的内置粘贴命令;一些变体也可用作 命令行模式映射。
<C-r><C-q>
映射查询分隔符字符串,然后按字符插入寄存器的内容,每行由它分隔。因此,要达到您想要的结果,那就是 <C-r><C-q>"\r<CR>
.
注意:如果要搜索多行文本,实际上必须使用 \n
而不是 \r
。
当我提取几行并将其粘贴到命令行时,每一行都是 ^M
而不是 \r
。例如,如果我在可视模式下复制下两行(使用命令 Vjy
):
line1
line2
并使用命令 /<c-r>"
将其粘贴到命令行(搜索)模式,我得到:
/line1^Mline2
但我预计:/line1\rline2
我想做的是突出显示粘贴的字符串,当我粘贴代码块时有什么用。 我知道我可以 select 它与
`[v`]
但我只想突出显示它,无论如何它可以通过将多行代码粘贴到 ex 中来替代或其他有趣的东西来使用。
正在以可视模式复制下一段:
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
,并将输出字符串存储在[=19=中].要在命令行中粘贴 p
的内容,请使用 <c-r>=p
.
我经常需要 "cast" 将内容注册到某种(按字符/按行/按块)模式,我为此编写了 UnconditionalPaste plugin。它提供了 gcp
、glp
等替代强制特定模式的内置粘贴命令;一些变体也可用作 命令行模式映射。
<C-r><C-q>
映射查询分隔符字符串,然后按字符插入寄存器的内容,每行由它分隔。因此,要达到您想要的结果,那就是 <C-r><C-q>"\r<CR>
.
注意:如果要搜索多行文本,实际上必须使用 \n
而不是 \r
。