Monday, February 15, 2016

Re: Help with autocomplete

On 2016-02-15, David Woodfall wrote:
> Consider the following piece of latex:
>
>
> ONE: & Some text here...
>
> TWO: & Some more text...
>
> THREE: & More bla bla bla...
>
>
> I would like to limit the autocomplete word list to contain only the
> words on the left of the `&'.
>
> How could this be done?
>
> I don't mind if I have to actually specify the words rather than vim
> finding them automatically.

I find the easiest way to use completion is to use "custom" and just
create a function that returns a newline-separated string of
candidate strings. The MyComplete() function below uses
getbufline() to put all the lines in the current buffer into a list,
then uses map() and matchstr() to replace each line by the word
preceding the '&'. Any non-matching lines are replaced by empty
lines. Finally, filter() gets rid of the empty lines and join()
joins the remaining lines into a string, with the lines separated by
newlines.

function! MyComplete(ArgLead, CmdLine, CursorPos)
return join(filter(map(getbufline("%", 1, "$"), "matchstr(v:val, '^\\k\\+:\\ze\\s*&')"), "v:val!=''"), "\n")
endfunction
command! -nargs=1 -complete=custom,MyComplete MyCmd echo "<args>"

Typing ":MyCmd " followed by a <Tab> then results in the following:

:MyCmd
ONE: TWO: THREE:
:MyCmd

Modify to suit.

HTH,
Gary

--
--
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

---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments: