]> git.phdru.name Git - dotfiles.git/commitdiff
.vim/rc: Adapt python code to both python and python3
authorOleg Broytman <phd@phdru.name>
Tue, 28 Aug 2018 22:46:38 +0000 (01:46 +0300)
committerOleg Broytman <phd@phdru.name>
Wed, 29 Aug 2018 15:03:45 +0000 (18:03 +0300)
.vim/python/completion.py [new file with mode: 0644]
.vim/python/virtualenv.py [new file with mode: 0644]
.vimrc

diff --git a/.vim/python/completion.py b/.vim/python/completion.py
new file mode 100644 (file)
index 0000000..037a93d
--- /dev/null
@@ -0,0 +1,71 @@
+# From http://slobin.pp.ru/vim/_vimrc.html
+# Adapted to python3 by Oleg Broytman <phd@phdru.name>
+
+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 (file)
index 0000000..3b76fcd
--- /dev/null
@@ -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 4a8453c2a933a4e2556258ec41bff049a290f2b2..9128b9448e7b4d9d850680e1e5980822cf9cb5e6 100644 (file)
--- a/.vimrc
+++ b/.vimrc
@@ -573,15 +573,11 @@ endif
 
 
 if has("python")
 
 
 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
 
 
 endif
 
 
@@ -732,70 +728,7 @@ endfunction
 
 
 if has("python")
 
 
 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)
 
 " 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()
 
 " 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
+       \ <line1>,<line2> python3 vim_calc(<q-args>)
+
+" Python text range filter
+command! -nargs=+ -range -complete=customlist,CompList Pydo
+       \ <line1>,<line2> python3 vim_pydo(<q-args>)
+
+" Display unicode name for the character under cursor
+command! Uname python3 vim_unicode_name()
+endif
 
 
+if has("python") || has("python3")
+command! UName Uname
 endif
 " ----------
 
 endif
 " ----------