当一个文件处理搜索,我已经习惯了: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