From c1fb9100f55005a4d854b99cee25d4ef056569ce Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Wed, 29 Aug 2018 01:46:38 +0300 Subject: [PATCH] .vim/rc: Adapt python code to both python and python3 --- .vim/python/completion.py | 71 ++++++++++++++++++++++++++ .vim/python/virtualenv.py | 10 ++++ .vimrc | 103 +++++++++++--------------------------- 3 files changed, 110 insertions(+), 74 deletions(-) create mode 100644 .vim/python/completion.py create mode 100644 .vim/python/virtualenv.py diff --git a/.vim/python/completion.py b/.vim/python/completion.py new file mode 100644 index 0000000..037a93d --- /dev/null +++ b/.vim/python/completion.py @@ -0,0 +1,71 @@ +# From http://slobin.pp.ru/vim/_vimrc.html +# Adapted to python3 by Oleg Broytman + +import sys, rlcompleter, unicodedata, vim +from itertools import * +vim_complete = rlcompleter.Completer().complete + +def vim_comp_list(): + """Implementation of CompList() function""" + arglead = vim.eval("a:ArgLead") + fence = int(vim.eval("match(a:ArgLead, '\(\w\|\.\)*$')")) + left, right = arglead[:fence], arglead[fence:] + try: + completions = (vim_complete(right, i) for i in count()) + candidates = list(takewhile(bool, completions)) + except NameError: + candidates = [] + suggestions = [left + x for x in candidates] + vim.command("return " + repr(suggestions)) + +def vim_calc(command): + """Implementation of :Calc command""" + global _ + try: + result = eval(command) + except SyntaxError: + if sys.version_info[0] == 2: + exec(command in globals(), locals()) + else: + exec(command, globals(), locals()) + else: + if result != None: + print(result) + _ = result + xx = ''.join('\\x%02x' % ord(x) for x in str(_)) + vim.command('let @" = "%s"' % xx) + +def vim_pydo(command): + """Implementation of :Pydo command""" + codeobj = compile(command, "command", "eval") + line1 = vim.current.range.start + line2 = vim.current.range.end + delta = 0 + for numz in range(line1, line2+1): + line = vim.current.buffer[numz-delta] + if sys.version_info[0] == 2: + uline = unicode(line, vim.eval('&fileencoding')) + else: + uline = line + num = numz + 1 + words = line.split() + result = eval(codeobj, globals(), locals()) + if result is None or result is False: + del vim.current.buffer[numz-delta] + delta += 1 + continue + if isinstance(result, list) or isinstance(result, tuple): + result = " ".join(map(str, result)) + else: + result = str(result) + vim.current.buffer[numz-delta] = result + +def vim_unicode_name(): + try: + char = vim.eval("matchstr(getline('.'), '.', col('.') - 1)") + if sys.version_info[0] == 2: + print(unicodedata.name(char.decode(vim.eval("&encoding")))) + else: + print(unicodedata.name(char)) + except (AttributeError, ValueError) as target: + print("%s: %s" % (target.__class__.__name__, target)) diff --git a/.vim/python/virtualenv.py b/.vim/python/virtualenv.py new file mode 100644 index 0000000..3b76fcd --- /dev/null +++ b/.vim/python/virtualenv.py @@ -0,0 +1,10 @@ +import sys, os + +virtualenv_dir = os.environ.get('VIRTUAL_ENV') +if virtualenv_dir: + sys.path.insert(0, virtualenv_dir) + activate_this = os.path.join(virtualenv_dir, 'bin', 'activate_this.py') + if sys.version_info[0] == 2: + execfile(activate_this, dict(__file__=activate_this)) + else: + exec(open(activate_this, 'rU').read(), dict(__file__=activate_this)) diff --git a/.vimrc b/.vimrc index 4a8453c..9128b94 100644 --- a/.vimrc +++ b/.vimrc @@ -573,15 +573,11 @@ endif if has("python") -python << END_OF_PYTHON -import sys, os - -virtualenv_dir = os.environ.get('VIRTUAL_ENV') -if virtualenv_dir: - sys.path.insert(0, virtualenv_dir) - activate_this = os.path.join(virtualenv_dir, 'bin', 'activate_this.py') - execfile(activate_this, dict(__file__=activate_this)) -END_OF_PYTHON +pyfile ~/.vim/python/virtualenv.py +endif + +if has("python3") +py3file ~/.vim/python/virtualenv.py endif @@ -732,70 +728,7 @@ endfunction if has("python") - -python << END_OF_PYTHON - -import sys, rlcompleter, unicodedata, vim -from itertools import * -vim_complete = rlcompleter.Completer().complete - -def vim_comp_list(): - """Implementation of CompList() function""" - arglead = vim.eval("a:ArgLead") - fence = int(vim.eval("match(a:ArgLead, '\(\w\|\.\)*$')")) - left, right = arglead[:fence], arglead[fence:] - try: - completions = (vim_complete(right, i) for i in count()) - candidates = list(takewhile(bool, completions)) - except NameError: - candidates = [] - suggestions = [left + x for x in candidates] - vim.command("return " + repr(suggestions)) - -def vim_calc(command): - """Implementation of :Calc command""" - global _ - try: - result = eval(command) - except SyntaxError: - exec command in globals() - else: - if result != None: - print result - _ = result - xx = ''.join('\\x%02x' % ord(x) for x in str(_)) - vim.command('let @" = "%s"' % xx) - -def vim_pydo(command): - """Implementation of :Pydo command""" - codeobj = compile(command, "command", "eval") - line1 = vim.current.range.start - line2 = vim.current.range.end - delta = 0 - for numz in range(line1, line2+1): - line = vim.current.buffer[numz-delta] - uline = unicode(line, vim.eval('&fileencoding')) - num = numz + 1 - words = line.split() - result = eval(codeobj, globals(), locals()) - if result is None or result is False: - del vim.current.buffer[numz-delta] - delta += 1 - continue - if isinstance(result, list) or isinstance(result, tuple): - result = " ".join(map(str, result)) - else: - result = str(result) - vim.current.buffer[numz-delta] = result - -def vim_unicode_name(): - try: - char = vim.eval("matchstr(getline('.'), '.', col('.') - 1)") - print map(unicodedata.name, char.decode(vim.eval("&encoding"))) - except (AttributeError, ValueError), target: - print "%s: %s" % (target.__class__.__name__, target.message) - -END_OF_PYTHON +pyfile ~/.vim/python/completion.py " Custom completion for python expressions function! CompList(ArgLead, CmdLine, CursorPos) @@ -812,8 +745,30 @@ command! -nargs=+ -range -complete=customlist,CompList Pydo " Display unicode name for the character under cursor command! Uname python vim_unicode_name() -command! UName call Uname() +endif + +if has("python3") +py3file ~/.vim/python/completion.py + +" Custom completion for python expressions +function! CompList(ArgLead, CmdLine, CursorPos) + python3 vim_comp_list() +endfunction + +" Python command line calculator +command! -nargs=+ -range -complete=customlist,CompList Calc + \ , python3 vim_calc() + +" Python text range filter +command! -nargs=+ -range -complete=customlist,CompList Pydo + \ , python3 vim_pydo() + +" Display unicode name for the character under cursor +command! Uname python3 vim_unicode_name() +endif +if has("python") || has("python3") +command! UName Uname endif " ---------- -- 2.39.2