1

I have a function (from here) that requires an argument enclosed in quotes.

if !exists('*Preserve') function! Preserve(command) try " Preparation: save last search, and cursor position. let l:win_view = winsaveview() let l:old_query = getreg('/') silent! execute 'keepjumps' . a:command finally " try restore / reg and cursor position call winrestview(l:win_view) call setreg('/', l:old_query) endtry endfunction endif 

I want to put this in a macro. I have tried,

let @d=':call Preserve(":normal ?^# ^Mjo## DESCRIPTION^]")' 

and

let @d=':call Preserve('':normal ?^# ^Mjo## DESCRIPTION^]'')' 

and various other ways, but nothing works.

How do I create a macro that calls this function without errors?

[EDIT]

Among the answer was the suggestion that I simply record the function. That's good. However, I keep a list of frequently-used macros in the form:

let @d='<contents of macro>' 

The reason is, some of the macros are very long, and occasionally I lose them from the registers and need to re-load them so-to-speak. Having to manually record the macro again would be a PITA. (BTW I'm aware I could perhaps record the function call and then append it (eg. qD) to a macro created with :let @d='[...]; but this is far from optimal.)

So, is it at all possible to :call a function (as above) without running into errors with quoting?

3
  • you are at least missing an enter after calling the function. I would rather suggest, to record the macro and manually call the function, which will make sure the register is set correctly to call the function next time it is executed. Commented Jun 29, 2021 at 6:11
  • as said before, do not forget the enter after :call, otherwise Vim would not execute the function Commented Jun 29, 2021 at 7:49
  • Perhaps instead of a macro a command would suit you better ? They won’t get lost, and they have better names Commented Jun 29, 2021 at 11:14

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.