Am 09.07.2012 03:44, schrieb Gary Johnson:
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...
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.
... also checked with 7.0 and 6.4 -- same results.
I'd say please don't declare this a bug, rather update the help.
e.g. how would you otherwise clear the last search pattern
:let @/ = ""
from within a function? (maybe not the best example)
Usually, when you assign to @/, you're supposed to know what you are
doing. OTOH, when doing a range command :/pat/ or :substitute or :global
etc. you might not think about side effects, that's what search-undo is for.
Plugins like :LogiPat assign to @/ within a function ().
Just to mention it, there is also a search-undo for autocmds.
--
Andy
--
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