Hi Bram, On Thu, Jun 2, 2016 at 9:53 AM, Bram Moolenaar <[email protected]> wrote: > > Ramel Eshed wrote: > >> Hi All, >> >> Thanks to Bram and his recent work on channels, I have a preliminary >> version of an asynchronous grep plugin which lets you work with the >> available results while grep is still running. I would like to take >> advantage of this relatively short script to raise some issues and >> thoughts I have. The plugin can be found at >> https://github.com/ramele/agrep. >> >> My original idea was to use the quickfix list and add each match to it >> from the out callback. I had some issues with it, so temporarily (I >> hope..) I’m using my own window to display the results (“agrep >> window”). This is the default now and it should demonstrate what this >> plugin should do eventually. In order to reproduce the quickfix >> issues, you'll need to tell agrep to use quickfix list instead of >> agrep window (:let qgrep_use_qf=1). You can install the plugin as is >> or load it with $vim -u NONE -N -S <path to agrep.vim> > > Several of the problems have been fixed. Especially appending to the > quickfix list should now be much faster. > > Let us know if you still encounter problems. >
The problem with adding large number of entries to a quickfix list is not fixed yet. I am attaching a test script to illustrate the problem. Source the script and run "call Measure_Caddexpr_Time()". You will see that it takes around 2 minutes to add the entries. The patch I sent earlier address this problem. - Yegappan >> 3. Changing other buffers: >> As far as I know, there is no nice way to change buffers other than >> the current one. There is the getbufline() function, but the symmetry >> is broken since there is no setbufline(). I found a discussion about >> this from 10 years ago >> (http://vim.1045645.n5.nabble.com/missing-setbufline-td1155970.html) >> but I'm not sure if Bram added it to his TODO list or not. In this >> script I'm using the move_to_buf() and back_from_buf() functions. The >> problems with this approach are: >> >> - It is ugly. >> - Poor performance (it is slow, you can see the cursor jumping between >> windows, it can cause Vim to hang). >> - Difficult to change hidden buffers or buffers in other tab pages. >> - Is has side effects - It seems to break my undo tree and I'm sure >> that there are more. > > This is actually difficult to do. The internals of Vim only expect a > buffer to change when it's in a window. Also when invoking > autocommands, which expect a valid buffer and window. And undo expects > the buffer to be the current buffer. This would be a lot of work to > change, and it's likely to introduce a few bugs. > >> I'm not very much experienced with external plugins (like Python) >> which can change any buffer, but it seems that when using a channel >> with "out_io": "buffer" the performance is much better. Is it possible >> to implement such a function based on how it's done there? > > Python uses switch_to_win_for_buf(). It doesn't work perfectly though. > Marks may be wrong and it may redraw the current window even though it > didn't change. > -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
caddexpr.vim
Description: Binary data
