example_1.py

Send to Kindle
home » snippets » vim » completion » example_1.py


import vim, sys, itertools

import string
TRANSLATE_QUOTES = string.maketrans('"\'', '\'"')

def VimReturn(value):
   vim.command("return " + repr(value).translate(TRANSLATE_QUOTES))

try:
  import json
  def VimReturn(value):
     vim.command("return " + json.dumps(value))
except ImportError:
  from ck_3p import json
  def VimReturn(value):
     vim.command("return " + json.write(value))

all_words = sorted(set(itertools.chain(*(line.split() for line in vim.current.buffer))))

def Foo(findstart, base, only_return_strings=False):
  if int(findstart):
        print "FindStart"
  else:
        print all_words
        matches = [i for i in all_words if i.startswith(base)]
        results = []
        for i, m in enumerate(matches):
          if only_return_strings:
            results.append(m)
          else:
            vim.command("call complete_add(%s)" % json.dumps({ "word" : m, "menu" : "(menu)|%s|" % m.upper(), "info" : "\n".join(vim.current.buffer[i:5+i]) }))
            if vim.eval("complete_check()") != "0":
              return
            # results.append({ "word" : m, "menu" : "|%s|" % m.upper(), "info" : "\n".join(vim.current.buffer[i:5+i]) })
        return results

cmds = ["""
function! Foo(findstart, base)
  py VimReturn(Foo(vim.eval("a:findstart"),vim.eval("a:base")))
endfunction
""",

"""
function! Foo2(cmd1, cmd2, pos)
  py VimReturn(Foo(0, vim.eval("a:cmd1"), only_return_strings=True))
endfunction

""",

"""
let a=input("Hello ", "", "customlist,Foo2")
"""]

for cmd in cmds:
    vim.command(cmd)
vim.command("set completefunc=Foo")