从剪贴板粘贴文本到vim中并去除换行符

3
我在将大量的文本从PDF文档中复制到vim中时,与从Web浏览器复制不同,每当PDF在段落内换行时,复制的文本就会包含一个新行。因此,当我使用'p'将其粘贴到vim中时,我需要按下'J'键多次来折叠这些新行。
我更希望有一种命令,可以映射到键盘上的其他字母上,以便将复制的文本内容粘贴并删除新行。您有什么想法如何做到这一点吗?
2个回答

2
这样做应该可以了:
map <leader>xx :let @* = substitute(@*, "\n", "", "g")<CR>"*p

<leader>xx更改为您选择的映射。
此命令将在剪贴板寄存器(即星号寄存器)中用空字符串("")替换行末字符(\n)。然后粘贴来自*寄存器的文本。


谢谢,我用空格替换了双引号"",现在它运行得很好。除了映射到<leader>xx之外,我还将其映射到<leader>x,但是否有更快的映射方式?我想将您的操作映射到字母'p',并且让'<leader>x'映射到原来'p'的功能,这可能吗?此外,是否可以使此映射不仅在正常模式下工作,而且在插入模式下也能工作? - user779159
1
我不建议更改默认的“p”键,但如果您真的想这样做,请使用以下代码:map p :let @* = substitute(@*, "\n", "", "g")<CR>:put*<CR>,然后使用 noremap <leader>x p。对于插入模式,您需要使用 imap 并在命令前加上 <esc> - mihai
你说得对,最好不要将p键映射到其他功能。所以我将它映射到<leader>p,这样做很好 map <leader>p :let @* = substitute(@*, "\n", " ", "g")<CR>:put*<CR>,但是在插入模式下映射似乎不起作用,我在上面的那行代码后面加了这一行,这样正确吗?imap <leader>p :let @* = substitute(@*, "\n", " ", "g")<Esc><CR>:put*<CR> - user779159
不,它需要是imap <leader>p <esc>....,这样它首先会退出插入模式。 - mihai
顺便问一下,有没有办法查看你正在考虑的映射是否已经分配给其他东西了?例如,我将其分配给'<leader>p',但我怎么知道它没有被占用? - user779159
你好,能否请您建议一下我该如何更改以下内容,以便粘贴的内容不包括初始换行符?例如,如果我在一行的中间并想要粘贴,它应该继续在当前行上进行粘贴(但是去除之前提到的其余换行符)。这是我目前的代码:map <leader>p :let @* = substitute(@*, "\n", " ", "g")<CR>:put*<CR>(我尝试删除第一个<CR>,但那样会出现错误。谢谢!) - user779159

0

你可以使用我的无条件粘贴插件来完成这个。它提供了gcp / gcP映射,可以强制粘贴为“逐字符”模式,即所有换行符和缩进都被转换为空格。它还具有其他类似的映射,用于强制使用按行模式粘贴,或者使用自定义分隔符进行粘贴等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接