例如,我有一些代码,我使用“*”在该代码内搜索某些内容。在该文件中找不到我想要的内容,我想使用类似ack
或grep
的内容在本地目录中进行搜索。我知道我可以在vim中做:! ack whatever
来做搜索,但是我想知道的是有没有办法用vim中当前搜索到的单词替换whatever
。如何在vim中检索当前搜索到的文本?
回答
Riffing断Tim Henigan's answer,把这个在你的.vimrc
cmap <C-R>/ <C-R>=substitute(substitute(@/, '^\\<', '', ''), '\\>$', '', '')
现在,当你在命令行模式下打到CTRL-R /
,它会掉落字boundry标记,所以你应该能够使用
:!grep CTRL-R / file-list
,你可以抽出字到寄存器中,在命令行模式下使用@regnum
“1yw :grep的@ 1
最后的搜索字符串已经在/ register – 2010-04-29 20:21:49
我还没有找到一个办法(容易)通搜索的内容注册到一个外部程序,而不诉诸键映射和eval statmements
但是,您可以使用<cword>
光标下通过这个字的外部程序。
:!echo <cword>
或
:!ack <cword>
这对我在windows上使用vim 7.2不起作用。 – 2010-04-29 16:58:08
是的,可能是因为ack和grep不处理'\ <'和'\>'相同。 – 2010-04-29 17:00:24
你可以这样做:':!回声@ /'看看你有什么合作。 – 2010-04-29 17:01:13
您可以使用Ctrl-R跟/插入最后搜索寄存器。
:!grep <Ctrl-r>/file_list
详情参见本Vim Tips Wiki条目。
更新:
的*
搜索命令命令总是包含字边界。
但是,g*
搜索命令的行为与*
相同,但没有字边界。
这可以用于解决您的问题,而不是使用rampion's answer中的自定义宏。
虽然与'*'结合使用,但它也有字面界限。无论如何,没有他们的文本? – 2010-04-29 17:11:10
“*”搜索设置搜索模式以包含单词边界。所以你不能使用'*'来获取没有它们的模式。 – 2010-04-29 17:17:02
@Paul Wicks:查看我关于'g *'搜索命令的更新。 – 2010-04-29 20:10:24
- 1. vim,如何搜索文本,并在搜索行之前添加新行
- 2. VIM搜索前进和后退重新选择搜索文本
- 3. Vim的开始从当前行搜索
- 4. 如何在AutoHotkey中检索当前脚本的文件名?
- 5. VIM搜索 - FuzzyFinder搜索特定文件
- 6. 如何在vim中编辑搜索文本?
- 7. 如何在vim中搜索没有前面的“\ r”的“\ n”?
- 8. Vim的搜索
- 9. 在搜索从一索引阵列到当前索引
- 10. 在vim中搜索选择
- 11. 在Vim中高级搜索
- 12. 在vim中包含搜索
- 13. 在Vim中搜索/替换
- 14. Vim:在Open Buffers中搜索
- 15. 通过文本搜索和检索ID
- 16. 如何检测pdf是文本搜索还是非文本搜索?
- 17. Vim,在文档头中搜索
- 18. vim搜索\\不\
- 19. 如何在eclipse中搜索当前xml文件
- 20. VIM搜索模式到quickfix
- 21. 如何打开当前目录中的所有.txt和.log文件,搜索并打印搜索到的文件
- 22. 如何检索当前正在悬停的ListViewItem的索引?
- 23. 如何在线程中搜索文本?
- 24. Vim的cnoremap在搜索
- 25. 如何检索NSPopUpButtonCell的当前选择?
- 26. 回到vim中的字符搜索?
- 27. 如何检索Jekyll中的当前帖子索引号?
- 28. 检索当前的SQL Server版本
- 29. 如何在Lucene 3.0.2中索引和搜索文本文件?
- 30. 向前搜索全文搜索
太棒了,这正是我所寻找的。我修改了一下你的映射,以避免必须按两次回车键: 'cmap/ = substitute(substitute(@ /''^ \\'','',''),'\\ > $','','')' –
2010-04-29 19:51:36
另一种选择是使用'g *'搜索命令而不是'*'。查看我更新的答案以获取详细信息:http://stackoverflow.com/questions/2739135/how-to-retrieve-the-currently-searched-for-text-in-vim/2739223#2739223 – 2010-04-29 20:11:10
'ctrl-r'后面跟着'/'从搜索寄存器中插入文本,但是如果你在键盘上输入任何字母后按'ctrl-r',它会插入相应寄存器的内容。除了字母之外,还有其他特殊的寄存器,例如'.'(最后输入的文本),'%'(当前文件名)等。通过重新映射'ctrl-r',您可以锁定所有可能的快捷键,由这些不同的寄存器构成。 – nelstrom 2010-04-29 22:05:42