例如,我有一些代碼,我使用「*」在該代碼內搜索某些內容。在該文件中找不到我想要的內容,我想使用類似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. 文件夾中的Vim搜索文本
- 5. 在vim腳本中搜索模式匹配的VIM檢查
- 6. 如何在AutoHotkey中檢索當前腳本的文件名?
- 7. Parse.com - 如何搜索/檢索當前用戶的安全對象
- 8. 如何在搜索後編輯vim中的高亮文本
- 9. 從搜索框中檢索文本
- 10. VIM搜索 - FuzzyFinder搜索特定文件
- 11. Azure在blob上搜索在搜索後檢索到blob本身
- 12. 如何在vim中編輯搜索文本?
- 13. 如何在vim中搜索沒有前面的「\ r」的「\ n」?
- 14. Vim的搜索
- 15. 如何在vim中搜索</string>?
- 16. 如何在Vim中搜索百分號(%)?
- 17. vim如何搜索URL
- 18. VIM - 僅在搜索
- 19. 在搜索從一索引陣列到當前索引
- 20. 在Vim中高級搜索
- 21. Vim:在Open Buffers中搜索
- 22. 在vim中包含搜索
- 23. 在vim中搜索選擇
- 24. 在Vim中搜索/替換
- 25. 在vim中如何向前搜索忽略換行符?
- 26. 通過文本搜索和檢索ID
- 27. 如何搜索@之前:在記事本++?
- 28. Vim,在文檔頭中搜索
- 29. vim搜索\\不\
- 30. 如何檢測pdf是文本搜索還是非文本搜索?
太棒了,這正是我所尋找的。我修改了一下你的映射,以避免必須按兩次回車鍵: '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