我喜歡用Visual Studio的一個特性是隻能在打開的文件中搜索。例如,如果我最近對某些文件進行了更改,並且想要跟蹤這些更改,我可能會搜索某個單詞,但只能在這些文件中查找,以避免獲取大量必要的匹配項。Vim:在Open Buffers中搜索
這對Vim來說可能嗎?我感興趣的是能夠打開我改變過的文件以便使用:
gvim `git diff --name-only`
然後搜索那些我想要的文件。
我喜歡用Visual Studio的一個特性是隻能在打開的文件中搜索。例如,如果我最近對某些文件進行了更改,並且想要跟蹤這些更改,我可能會搜索某個單詞,但只能在這些文件中查找,以避免獲取大量必要的匹配項。Vim:在Open Buffers中搜索
這對Vim來說可能嗎?我感興趣的是能夠打開我改變過的文件以便使用:
gvim `git diff --name-only`
然後搜索那些我想要的文件。
一個很好的辦法做到這一點是使用vim的內部grep命令(:vim
):
:vim /pattern/ `git diff --name-only`
:copen
這將打開一個小窗口(稱爲quickfix
)與搜索結果和鏈接,打開相應的文件(他們不必打開)。
不知道''會執行一個命令 – Lusk116 2017-07-20 10:55:10
如果你想讓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 $()
代替反引號使得使用嵌套的命令成爲可能。
有很多方法可以做到這一點。你能更專注於你期待的那種輸出/結果嗎? – Eelvex 2011-02-27 08:25:23
我認爲信息很清楚。假設我有5個打開的文件。如果我想使用vimgrep/grep來搜索這5個文件,我必須按名稱列出它們,這是相當長的任務。我只想讓vimgrep/grep在打開的文件(即緩衝區)中搜索。 – Rafid 2011-02-27 08:35:59
你可以':vim/pattern/\'git diff --name-only \''或':bufdo:%s/...'或者... – Eelvex 2011-02-27 08:38:17