當一個文件處理搜索,我已經習慣了:Vim的通過現有的所有緩衝區
/blah
do some work
n
do some work
n
do some work
假設現在我要搜索超過一些模式在Vim中加載的所有緩衝區,做一些工作在他們身上,繼續前進。我爲這個工作流使用了什麼命令?
當一個文件處理搜索,我已經習慣了:Vim的通過現有的所有緩衝區
/blah
do some work
n
do some work
n
do some work
假設現在我要搜索超過一些模式在Vim中加載的所有緩衝區,做一些工作在他們身上,繼續前進。我爲這個工作流使用了什麼命令?
我有以下映射(靈感來自Vimperator),使切換上一個/下一個緩衝區更容易。
nmap <C-P> :bp<CR>
nmap <C-N> :bn<CR>
這對'n'非常有效。當你完成你的文件的處理時,只需按CTRL-n再次點擊n,然後在下一個緩衝區中搜索。重做,直到你通過所有的緩衝區。
處理很多文件的另一種方式是參數列表。
它包含在啓動vim時作爲參數傳遞的任何文件(例如:vim someFile.txt someOtherFile.py
)。 [括號]內的文件是當前文件。
:args
[someFile.txt] someOtherFile.py
:n會帶你到列表中的下一個文件,並且:N會帶你回來。您還可以添加與argslist:argadd,或太創建一個新的args列表與
:n some.py files.py you.py want.py to.py work.py with.py
or to open all *.py files recursively from some project.
:n ~/MyProjects/TimeMachine/**/*.py
與宏的args列表做工精良(見:幫助Q),如果你有你的文件類似的變化。只需在第一個文件上記錄宏,然後按:n移至下一個文件並停止記錄。
qq/searchForSomethingAndDoStuffOrWhatever:nq
然後通過所有文件(6 @ Q)運行宏,看看,以確保一切順利,並用完成:牆。
它有點取決於你想要做什麼。如果你只是在多個文件中發生了一次完全相同的更改(並且這些更改是唯一已加載的),那麼我還會喜歡:ba(:tabdo sp)命令。這很快,你可以看到發生了什麼。
如果你有一堆打開的緩衝區,你可以加載你想要在其中工作的文件,每個文件在一個窗口中,並對它們進行正則表達式。
CTRL-w v :b someFile
:sp anotherFile
...
:windo :%s/foo/bar/g
我真的推薦FuzzyFinder,它會讓你的生活在打開文件的時候容易得多。
http://www.vim.org/scripts/script.php?script_id=1984
MMMMMMMM VIM是好的!性感! :)
使用bufdo
命令。
:bufdo command
:bufdo command
大致等價於迭代每個緩衝區並執行命令。例如,假設你想要做一個查找和貫穿所有的緩衝區替換:
:bufdo! %s/FIND/REPLACE/g
還是讓我們說,我們要刪除匹配來自所有的緩衝區正規表達式「SQL」文本中的所有行:
:bufdo! g/SQL/del
或者,也許我們要設置文件編碼成UTF-8上的所有緩存:
:bufdo! set fenc=utf-8
以上可以推斷爲Windows(:windo
),標籤(:tabdo
)和參數(:argdo
)。查看關於bufdo的幫助以獲取更多信息。
我不認爲有可能在文件或緩衝區中擴展'n'函數。你可以使用
:grep blah *
然後做
:cn
移動到與它嗒嗒下一行。這將在文件之間進行切換,但並不完美。鍵入冒號總是更麻煩,它只會把你帶到線上,而不是單詞。
我通常要做的是打開我想要在標籤中搜索的文件,然後使用'n'和'gt'跳轉到下一個標籤,當我到達文件的末尾,或者列出文件命令行我可以在編輯完成後跳到下一個帶有':wn'的文件。
希望它有幫助!
我會使用以下兩條命令打開新的標籤頁所有緩衝區:
:tab sp
:bufdo sp
當您完成通過每個文件逐一然後搜索並關閉它的窗口(使用:q
或:close
)。使用CTRL + W_可最大化每個窗口,因爲您正在使用它。當您完成並關閉最後一個窗口時,選項卡頁面將關閉,無論您身在何處,您將決定執行搜索。
這裏是你的福音: https://github.com/jeetsukumaran/vim-buffersaurus
這個可愛的插件會顯示所有在單獨的窗口,您可以從中選擇符合您查詢的文件。它支持正則表達式。
我們可以使用vimgrep
並在argslist中進行搜索。但首先讓我們填充argslist與我們所有的緩衝區:
:bufdo :args ## %
現在我們可以在我們的argslist
:vimgrep /blah/ ##
凡% == the current filepath
和## == the arglist
搜索。
我建議關注這些vimcasts如果您想了解更多:Populate the arglist,你要切換到另一個緩衝區Search multiple files with vimgrep
謝謝!這正是我多年來一直在尋找的東西。 (只是缺少'##'vimgrep參數。)我想我們也可以使用':arga [dd]'將參數添加到列表中。 – 2016-01-28 19:19:59
在vim中'##'是當前的參數列表,'%'是當前的文件名。我們首先用':%argd'清除當前的參數列表,然後使用':bufdo'將緩衝區一次添加到參數列表中。最後,我們使用':vimgrep'和'##'來搜索arglist。 – JPaget 2016-09-01 20:43:44
任何時候試試這個。
:b + <any part of file in buffer> + tab
舉一個例子。我有這在我的緩衝
77 「/var/www/html/TopMenuAlertAlert.vue」 線65
78 「/var/www/html/MainSidebar.vue」 線29
79「/無功/www/html/FullScreenSearch.vue」線26
80 「/var/www/html/Menu.vue」 線93
81 「/var/www/html/layouts/RightSidebar.vue」 線195
正如我想改變到另一個緩衝區,我可能還記得有關文件的一些細節,如'警報'
所以我只是去
:b Alert + tab
如果給定的文件是不是就是我想要的,我只是不斷的壓片。
Vim將繼續提供接近它的下一個文件。
一旦你得到它。按Enter鍵。
看看這裏http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers – Rod 2012-11-14 17:03:04
這不是一個好的答案。即使它是正確的,它也需要通過評論來查看,然後通過可能提供也可能不提供答案的文檔進行拖網。看到一位資深SO用戶以這種方式回答問題令人失望。 – arman 2014-09-26 13:40:04
我已經添加了一些我希望有用的示例和說明。如果您仍然認爲它缺少某些東西,請告訴我。 – 2014-10-01 18:43:30