Saturday, September 28, 2013

Re: Delete from search history

>> Hi,
>> The call to histdel below doesn't seem to be doing what I want it to do.
>> It doesn't delete my 3 search patterns added by the 2 :substitute and
>> the :global calls.  Not sure what it does exactly, it seems to delete
>> one correct entry and 2 wrong ones.
>> All I want is no trace of those patterns in my search history,
>> but histdel('/', '\\s\\+\$') wouldn't be a solution since I still want
>> this pattern in my history if I enter it manually at some point.
>> Any help appreciated.
>>
>>
>> " Squeeze empty lines
>> function! s:Squeeze()
>>    let save_cursor = getpos(".")
>>    " empty lines at BOF|EOF
>>  
>>  silent  %substitute/\%^\_s*\n\|\_s*\%$//
>>    " empty line clusters
>>    silent   global/^\%(\s*$\n\)\{2,}/delete
>>    silent! %substitute/\s\+$//e
>>    for i in range(1, 3)
>>       call histdel('/', -1)
>>    endfor
>>    call setpos('.', save_cursor)
>> endfunction
>>
>> nmap <silent> <leader>z :call <sid>Squeeze()<cr>
>
>Not sure what happens there, but it might be a lot simpler if we have a
>way to avoid patterns to be put in the history, instead of deleting them
>afterwards.  When a pattern was typed you may want to keep it, but after
>executing a :s command you don't know if the pattern was typed before
>you used it with :s.  That gets complicated.
>
>For :s we could add a flag, but for :g/pattern/ there is is no place to
>put a flag.  Perhaps we should use a modifier ":keeppatterns", like
>":keepjumps" and ":keepmarks" ?

Yes that would be perfect. In fact I spent quite a lot of time searching the
help thinking there would be something like that.
Also the help at line 67 in cmdline.txt might need changing as it implies only
one search pattern would be remembered if coming from a mapping. Not all of them
as it happens in this example.

No comments: