示例:%y+
猛拉到外部+剪贴板。现在我希望将^\S\+
这样的正则表达式输出到外部+剪贴板。怎么样?
试用1. [失败] :g@^\S\+@y+
试用2. [失败] :^\S\+y+
答案 0 :(得分:6)
在这里查看http://vim.wikia.com/wiki/Copy_the_search_results_into_clipboard,“复制包含搜索匹配的行”部分。
这对我有用(清除注册a
,将pattern
结果放入其中,复制到剪贴板中):
qaq
:g/pattern/y A
:let @+ = @a
当我尝试:g/pattern/y+
时,它只复制了第一行。
链接上的那个部分也提供了一个可以写入来复制所有行的功能,但它仍然看起来像一个两步过程(执行/pattern
然后调用该函数):但你可能写的是自己的宏/快捷方式按顺序执行。
答案 1 :(得分:2)
也许你可以在下面找到一些灵感:
:saveas %.tmp
开始处理副本
:v//d
:exec '%s/^.\{-\}\(' . @/ . '\).*$/\1/g'
例如,对以下文字进行搜索/word\d
:
Tincidunt。 Proin sagittis2 。 Curabitur auctor metus non mauris。 Nunc condimentum nisl non augue。 Donec leo urna,dignissim vitae,porttitor ut,iaculis坐 amet,sem。
课程内容taciti sociosqu3 ad litora torquent per conubia nostra,per inceptos himenaeos。 Suspendisse的潜力。 Quisque augue metus,hendrerit坐 amet,commodo vel,scelerisque ut,ante。 Praesent euismod euismod risus。 Mauris ut metus sit amet mi cursus commodo。 Morbi认为mauris ac sapien。 Donec 胡斯托。 Sed congue nunc vel mauris0 。 Pellentesque vehicula orci id libero。在hac 栖息地平原唯一。 Nulla sollicitudin, purus1 id elementum dictum,dolor augue hendrerit ante,vel semper metus enim et dolor。 Pellentesque molestie9 。
会突出显示的字样。做
:v//d|exec '%s/^.\{-\}\(' . @/ . '\).*$/\1/g'
产生以下缓冲区:
sagittis2
sociosqu3
mauris0
purus1
molestie9
答案 2 :(得分:1)
尝试以下方法。首先定义一个保存你的功能 匹配的regexp到列表中:(帮助列表)。
:fun Add(list, item)
: call add(a:list, a:item)
: return a:item
:endfun
请注意,它还会返回添加的项目。这不是必要的, 但是你在这里返回的内容将成为替代文本 :替换如下。
接下来,创建一个空列表。
:let list=[]
然后运行你的正则表达式。
:%s/^\S\+/\=Add(list, submatch(0))/
请注意,替换以\ =开头(请参阅:help 子取代特)。结果是我们替换了匹配表达式 与自己一起,但同时在列表中捕获结果。
submatch()函数返回:substitute的匹配部分 命令。 submatch(0)返回整个匹配。
请注意,作为副作用,缓冲区被标记为已更改。 如果您在执行替换之前保存了缓冲区,那么您 只需点击你进行撤消或附加' |就可以解决这个问题ü'到你的 命令。 (如果您要撤消操作,那么它并不重要 我们从Add函数返回的内容。)
您可以使用
查看匹配项:echo list
或者您可以使用
将它们附加到缓冲区:$put=list
我希望这会有所帮助。一旦你知道如何,这很简单,但是有 在那里消化很多。
哦,我差点忘了!您可以使用
将匹配项添加到剪贴板:let @+ = join(list, '^@')
然后你的比赛将在剪贴板中,每个都在一个单独的行上。
^ @表示NUL字符,并且用< C-V>< C-J>生成,意思是 按控制-V,然后按控制-J。 (为什么你必须在这里使用^ @ 一个完整的话题本身。)
答案 3 :(得分:1)
将所有搜索结果附加到以换行符分隔的reg X
(大写):
:g/^/call setreg('X', matchstr(getline('.'), '^\S\+') . "\n")
清除reg x
:
qxq