From bd7323d84a593bfc31f0aeb112ba442886581257 Mon Sep 17 00:00:00 2001 From: ben Date: Thu, 25 Feb 2010 20:24:41 +0100 Subject: mv vim`s runtimepath to .config/vim instead .vim --- .config/vim/plugin/templates.vim | 105 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100755 .config/vim/plugin/templates.vim (limited to '.config/vim/plugin/templates.vim') diff --git a/.config/vim/plugin/templates.vim b/.config/vim/plugin/templates.vim new file mode 100755 index 0000000..b24dfb5 --- /dev/null +++ b/.config/vim/plugin/templates.vim @@ -0,0 +1,105 @@ +" vim:fileencoding=iso-8859-1 +if has("python") +py < jabber.ccc.de) reported some problems in his + VIM environment, which inserts a CR after the first character + in templates. He came up with a workaround. Replace the + imap command in the end with + command('imap ^D ^[:py template_complete()a') + to make it work. + +""" +import sys +#sys.path.remove("") +from vim import * +from cStringIO import StringIO +import re, os +template_buffer = {} + +def template_complete(): + global template_buffer + + # Check for a template + currentPos = current.window.cursor[1] + template = "" + while currentPos >= 0 and len(current.line) > 0 and not current.line[currentPos].isspace(): + template = current.line[currentPos] + template + currentPos = currentPos - 1 + currentPos = currentPos + 1 + + if template is "": + return + + # Search for that template + fileType = eval("&ft") + if fileType not in template_buffer or template not in template_buffer[fileType]: + if fileType not in template_buffer: + template_buffer[fileType] = {} + searchPath = eval("g:templatePath") + + searchPaths = [ + "%s/%s/%s" % (searchPath, fileType, template), + "%s/%s" % (searchPath, template), + "%s/%s/%s.py" % (searchPath, fileType, template), + "%s/%s.py" % (searchPath, template) + ] + for templateFile in searchPaths: + if not os.access(templateFile, os.F_OK): + continue + try: + if templateFile[-3:] == ".py": + template_buffer[fileType][template] = open(templateFile, "r").read() + else: + template_buffer[fileType][template] = open(templateFile, "r").readlines() + break + except: + continue + else: + template_buffer[fileType][template] = False + if template_buffer[fileType][template] is not False: + # Insert template + indention = re.search("^\s+", current.line) + if indention is None: + indention = "" + else: + indention = indention.group(0) + endOfLine = current.line[current.window.cursor[1] + 1:] + current.line = current.line[:currentPos] + range = current.buffer.range(current.window.cursor[0], current.window.cursor[0]) + + if type(template_buffer[fileType][template]) == str: + # Execute as python code + backup = sys.stdout + sys.stdout = StringIO() + code = template_buffer[fileType][template] + exec code in {}, {"_vim": current, "_command": command} + insert = sys.stdout.getvalue().split("\n") + sys.stdout = backup + else: + insert = template_buffer[fileType][template] + + firstLine = True + sentVar = False + for line in insert: + if line.find("<++>") is not -1: + sentVar = True + if firstLine: + range.append(line) + else: + range.append(indention + line) + firstLine = False + if sentVar: + range.append(endOfLine) + else: + range.append("<++>%s" % endOfLine) + command('normal J') + +command('imap  :py template_complete()a') +EOF +endif -- cgit