On Jul 8, 6:44 pm, Gary Johnson <[email protected]> wrote: > On 2012-07-08, Bee wrote: > > On Jul 8, 3:33 pm, Gary Johnson wrote: > > > On 2012-06-24, Bee wrote: > > > > On Jun 24, 10:32 am, Gary Johnson wrote: > > > > > On 2012-06-24, Bee wrote: > > > > > > 2match has been set and is working. > > > > > > > :echo matcharg(2)[1] returns the correct pattern. > > > > > > > Why does this not set the search register? > > > > > > > let @/=matcharg(2)[1] > > > > > > It works for me. > > > > > > Are you setting @/ within a function and expecting that setting to > > > > > persist after the function returns? That won't work because > > > > > functions use their own instances of @/. > > > > > > Regards, > > > > > Gary > > > > > Thank you, I now see from :help "/ > > > > > 9. Last search pattern register "/ *quote_/* *quote/* > > > > ... > > > > "Note that the valued is restored when returning from a function" > > > > > --And-- > > > > > *function-search-undo* > > > > The last used search pattern and the redo command "." > > > > will not be changed by the function. This also > > > > implies that the effect of |:nohlsearch| is undone > > > > when the function returns. > > > > > BUT... > > > > > When the following function exits, the '/' register is still set as it > > > > was in the function and 'n' will find the next occurance. > > > > What should it have been restored to? > > > > > " toggle match end of long lines > > > > hi OverLength NONE cterm=underline ctermbg=darkyellow > > > > function! OverLength(n) > > > > if matcharg(2)[0] == "OverLength" > > > > 2match none OverLength > > > > else "!greater than nth virtual column :help \%>v > > > > let @/='\%>' . a:n . 'v.*' > > > > execute '2match OverLength /' . @/ . '/' > > > > endif > > > > endf > > > > I would expect it to be restored to whatever value it had before the > > > OverLength() function was called. Are you sure that the '/' > > > register was not already set to that pattern before the function > > > was called? > > > > If you can do this: > > > > 1. :let @/= "hello" > > > 2. :call OverLength(40) > > > 3. :echo @/ > > > > and see that the '/' no longer contains "hello", then you may have > > > found a bug in Vim. > > > > BTW, according to ":help 2match", clearing the match is done with > > > ":2match none"--the second argument is not needed and appears to be > > > ignored. > > > > Regards, > > > Gary > > > To make it clearer: > > > :let @/= "hello" > > > :echo @/ > > hello > > > :call OverLength(40) > > > :echo @/ > > \%>40v.* > > > Bill > > I just tried that myself, as I suppose I could have earlier, and I > see the same thing. I even simplified the function to this: > > function! MyTest() > let @/='world' > endfunction > > and after calling MyTest(), the '/' register contains "world". > > However, if I change the function to this: > > function! MyTest() > /match > echo @/ > endfunction > > and call it, the cursor moves to the next occurrence of "match" in > the file and the string "match" is echoed to the command line, but > executing ':echo @/' displays "hello". > > So it appears that setting the '/' register indirectly alters a > local copy, but setting it directly with :let also alters the global > copy. I think that's a bug. > > The results were the same on versions 7.2.330 and 7.3.584, so it has > been like this for a while. > > Regards, > Gary
Hi Gary Will you be writing a bug report? Or shall I? Where to post? vim_use or vim_dev Bill -- You received this message from the "vim_use" 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
