Open romainl opened 13 years ago
Thanks for the report. I've been caught by this as well - seems like Vim doesn't initiate BufRead
for files given on the command line until they're entered for the first time. Since :LustyBufferGrep
searches based on the in-memory buffer (mostly for speed), it won't find any matches in these files.
The workaround I've incorporated into my workflow:
<C-a>
a lot within LustyExplorer to open all files in the current view.Possible solutions:
:LustyBufferGrep
is called, iterate through all open buffers and BufRead
them if needed.I'd prefer the first solution; the second one probably opens up a can of worms.
Thanks. Actually I don't do that often so it's not that big of a deal but it can come as a surprise for other users. Opening multiple files like that is quite common, I think.
To be honest I didn't notice this "bug" in my normal workflow. I "discovered" it while doing some experiments to answer a question on StackOverflow.
Yes, the 1st solution seems to be the best of the two.
Thanks again for your answer and for this extremelly useful script.
I just found ":bufdo edit" which will load all the buffers into the editor memory.
I am new to vim, so not sure if this helps.
Thanks zoz, in tandem with eventignore
, that may just be what we need.
Ok I did some digging and I wanted to share some findings.
vim file1.txt file2.txt file3.txt
I also see that we are not the only ones that encounter this "problem", kien's ctrlp solves it like this: https://github.com/kien/ctrlp.vim/blob/master/autoload/ctrlp/line.vim#L36 i.e. by explicitly loading the buffer's content. I'm trying to do the same in lusty, see the following (proof of concept) patch. It basically works because I can see that the lines get loaded and grepped but there are still some "structural" issues that I can't quite solve easily: it seems like vim's buffer loading messages break LustyBufferGrep input mode.
I'm basically giving up right now on this issue, but leaving this comment for the posterity.
diff --git c/plugin/lusty-explorer.vim i/plugin/lusty-explorer.vim
index de02b5a..5b4a680 100644
--- c/plugin/lusty-explorer.vim
+++ i/plugin/lusty-explorer.vim
@@ -1474,6 +1474,7 @@ class BufferGrep < Explorer
# Used to avoid duplicating match strings, which slows down refresh.
highlight_hash = {}
+ current_bufnr = VIM::Buffer.current.number
# Search through every line of every open buffer for the
# given expression.
@buffer_entries.each do |entry|
@@ -1481,6 +1482,12 @@ class BufferGrep < Explorer
line_count = vim_buffer.count
(1..line_count). each do |i|
line = vim_buffer[i]
+ if line.empty?
+ VIM::command "buffer #{vim_buffer.number}"
+ vim_buffer = entry.vim_buffer
+ line = vim_buffer[i]
+ VIM::command "buffer #{current_bufnr}"
+ end
match = regex.match(line)
if match
matched_str = match.to_s
Late but same problem here.
Hi.
If I load a number of files in Vim like this:
I've got
a.txt
in the current window and the buffer list (:ls
) is populated accordingly.I can use
:LustyBufferExplorer
to jump tod.txt
as expected.However, when using
:LustyBufferGrep
the list of sources has all the expected buffers (a.txt
tod.txt
) but I'm unable to search within them. Only within the current one.:LustyBufferGrep
seems to only work when I've "opened" all the buffers: if I jump to another buffer LustyExplorer is now able to search within the first and the second. That's only 2 buffers but the list of sources still displays 4 buffers.Is that the correct behaviour?
How shall I do to make it work with all loaded buffers? Say all 150 of them.
Thanks.