2011-02-27 149 views
6

我喜歡用Visual Studio的一個特性是隻能在打開的文件中搜索。例如,如果我最近對某些文件進行了更改,並且想要跟蹤這些更改,我可能會搜索某個單詞,但只能在這些文件中查找,以避免獲取大量必要的匹配項。Vim:在Open Buffers中搜索

這對Vim來說可能嗎?我感興趣的是能夠打開我改變過的文件以便使用:

gvim `git diff --name-only` 

然後搜索那些我想要的文件。

+0

有很多方法可以做到這一點。你能更專注於你期待的那種輸出/結果嗎? – Eelvex 2011-02-27 08:25:23

+0

我認爲信息很清楚。假設我有5個打開的文件。如果我想使用vimgrep/grep來搜索這5個文件,我必須按名稱列出它們,這是相當長的任務。我只想讓vimgrep/grep在打開的文件(即緩衝區)中搜索。 – Rafid 2011-02-27 08:35:59

+0

你可以':vim/pattern/\'git diff --name-only \''或':bufdo:%s/...'或者... – Eelvex 2011-02-27 08:38:17

回答

2

一個很好的辦法做到這一點是使用vim的內部grep命令(:vim):

:vim /pattern/ `git diff --name-only` 
:copen 

這將打開一個小窗口(稱爲quickfix)與搜索結果和鏈接,打開相應的文件(他們不必打開)。

+0

不知道''會執行一個命令 – Lusk116 2017-07-20 10:55:10

1

如果你想讓Vim打開自己的緩衝區中的所有文件進行匹配您的DIFF的文件,你可以試試這個:

gvim $(grep -l pattern $(git diff --relative --name-only)) 

git diff --relative --name-only顯示了指數,但相對於文件名修改過的文件當前的工作目錄。

grep -l pattern <list of files>將報告包含在pattern匹配文件名。 (請注意,該圖案只是有在文件存在,git diff輸出不。)

POSIX $()代替反引號使得使用嵌套的命令成爲可能。

+0

嵌套命令也可以使用反引號:'echo echo \ echo abc \ '(用實際反引號代替)。 – ZyX 2011-02-27 15:40:08

+0

@ZYX,哈哈,從來沒有想過要逃避反擊,以便將它們嵌套在它們之前。 :)每天都有新的東西。 – sarnold 2011-02-28 01:01:08