我正在使用以下命令将文档中的所有文本行复制到系统剪贴板:
%y+
通常,特别是为了将代码复制到StackOverflow;),我将sed转换应用于我的缓冲区,以便更容易使用MarkDown进行粘贴:
%s:^:\t:g
有没有办法链接命令而不实际将它应用到我的缓冲区,只有复制的文本?
答案 0 :(得分:6)
我建议使用CLI实用程序将它放在剪贴板上:我之前发现了几个,但这里有一个:
所以你要做
:%!sed 's:^:\t:g`|xclip
或
:%!sed 's:^:\t:g`|xclip -selection c
后者使用X剪贴板而不是主剪贴板(假设为UNIX)。
在Windows上,可能存在类似的实用程序
修改强>
纯粹的vim解决方案是:
:let @+=substitute(join(getbufline("%", 1, "$"), "\r\n"), "^\\|\n", "\&\t", "g")
注意:
答案 1 :(得分:3)
如果您不介意在撤消列表中添加条目(这实际上意味着 编辑缓冲区的内容),你可以执行替换,拉动文本, 并在一个命令中撤消该替换。
:%s/^/\t/|%y+|u
另一个解决方案是在内容中使替换正确
复制后的+
寄存器。
:%y+|let@+=substitute(@+,'^\|\n\zs','\t','g')
答案 2 :(得分:2)
如果shiftwidth
等于4且设置了expandtab
,我会这样做:
:set guioptions+=a
ggVG>gv
7次击键并不是那么糟糕。当然没有前命令。如果你想要ex命令,你可以这样做:
function! ToSo()
%y +
let @+ = " " . substitute(@+, '\n', "\n ", 'g')
endfunction
command! -nargs=0 ToSo :call ToSo()<Enter>
然后:
:ToSo
会将您想要的任何内容放入剪贴板