Merge pull request #807 from ZyX-I/improved-troubleshooting

Improved troubleshooting
This commit is contained in:
ZyX-I 2014-02-15 23:43:04 +03:00
commit 1faf118fa3
3 changed files with 67 additions and 37 deletions

View File

@ -99,20 +99,6 @@ My vim statusline is hidden/only appears in split windows!
* Make sure that you have ``set laststatus=2`` in your :file:`vimrc`. * Make sure that you have ``set laststatus=2`` in your :file:`vimrc`.
I get E858/E860 error in vim (Eval did not return a valid python object)
--------------------------------------------------------------------------
* You need to make ``pyeval()`` display python stack trace. There is currently
a patch for this, but it was not merged into main vim tree, thus you will have
to use different approach: reproduce the error with
.. code-block:: sh
vim --cmd "let g:powerline_debugging_pyeval=1" ...
and then use the stack trace to search for existing issues or to create a new
one.
My vim statusline is not displayed completely and has too much spaces My vim statusline is not displayed completely and has too much spaces
--------------------------------------------------------------------- ---------------------------------------------------------------------

View File

@ -93,10 +93,12 @@ Installation
Usage Usage
===== =====
.. _vim-vimrc:
Vim statusline Vim statusline
-------------- --------------
If installed using pip just use If installed using pip just add
.. code-block:: vim .. code-block:: vim
@ -104,7 +106,7 @@ If installed using pip just use
python powerline_setup() python powerline_setup()
python del powerline_setup python del powerline_setup
(replace ``python`` with ``python3`` if appropriate). (replace ``python`` with ``python3`` if appropriate) to your :file:`vimrc`.
If you just cloned the repository add the following line to your :file:`vimrc`, If you just cloned the repository add the following line to your :file:`vimrc`,
where ``{repository_root}`` is the absolute path to your Powerline installation where ``{repository_root}`` is the absolute path to your Powerline installation

View File

@ -3,39 +3,78 @@ if exists('g:powerline_loaded')
endif endif
let g:powerline_loaded = 1 let g:powerline_loaded = 1
function! s:CriticalError(message)
echohl ErrorMsg
echomsg a:message
echohl None
endfunction
if !has('python') && !has('python3') if !has('python') && !has('python3')
if !exists('g:powerline_no_python_error') if !exists('g:powerline_no_python_error')
call s:CriticalError('You need vim compiled with Python 2.6+ or 3.2+ support echohl ErrorMsg
\ for Powerline to work. Please consult the documentation for more details.') echomsg 'You need vim compiled with Python 2.6, 2.7 or 3.2 and later support'
echomsg 'for Powerline to work. Please consult the documentation for more'
echomsg 'details.'
echohl None
endif endif
finish finish
endif endif
let s:pycmd = substitute(get(g:, 'powerline_pycmd', has('python') ? 'py' : 'py3'), let s:pycmd = substitute(get(g:, 'powerline_pycmd', has('python') ? 'py' : 'py3'), '\v^(py)%[thon](3?)$', '\1\2', '')
\'\v^(py)%[thon](3?)$', '\1\2', '')
let s:pyeval = get(g:, 'powerline_pyeval', s:pycmd.'eval') let s:pyeval = get(g:, 'powerline_pyeval', s:pycmd.'eval')
let s:import_cmd = 'from powerline.vim import setup as powerline_setup' let s:import_cmd = 'from powerline.vim import setup as powerline_setup'
try try
execute s:pycmd "try:\n" let s:pystr = "try:\n"
\ ." ".s:import_cmd."\n" let s:pystr .= " ".s:import_cmd."\n"
\ ."except ImportError:\n" let s:pystr .= "except ImportError:\n"
\ ." import sys, vim\n" let s:pystr .= " import sys, vim\n"
\ ." sys.path.append(vim.eval('expand(\"<sfile>:h:h:h:h:h\")'))\n" let s:pystr .= " sys.path.append(vim.eval('expand(\"<sfile>:h:h:h:h:h\")'))\n"
\ ." ".s:import_cmd let s:pystr .= " ".s:import_cmd."\n"
execute s:pycmd s:pystr
unlet s:pystr
let s:launched = 1 let s:launched = 1
finally finally
unlet s:import_cmd
if !exists('s:launched') if !exists('s:launched')
call s:CriticalError('An error occurred while importing the Powerline package. echohl ErrorMsg
\ This could be caused by an invalid sys.path setting, or by an incompatible echomsg 'An error occurred while importing powerline package.'
\ Python version (Powerline requires Python 2.6+ or 3.2+ to work). Please consult echomsg 'This could be caused by invalid sys.path setting,'
\ the troubleshooting section in the documentation for possible solutions.') echomsg 'or by an incompatible Python version (powerline requires'
echomsg 'Python 2.6, 2.7 or 3.2 and later to work). Please consult'
echomsg 'the troubleshooting section in the documentation for'
echomsg 'possible solutions.'
echohl None
let s:pystr = "def powerline_troubleshoot():\n"
let s:pystr .= " import sys\n"
let s:pystr .= " if sys.version_info < (2, 6):\n"
let s:pystr .= " print('Too old python version: ' + sys.version + ' (first supported is 2.6)')\n"
let s:pystr .= " elif sys.version_info[0] == 3 and sys.version_info[1] < 2:\n"
let s:pystr .= " print('Too old python 3 version: ' + sys.version + ' (first supported is 3.2)')\n"
let s:pystr .= " try:\n"
let s:pystr .= " import powerline\n"
let s:pystr .= " except ImportError:\n"
let s:pystr .= " print('Unable to import powerline, is it installed?')\n"
if expand('<sfile>')[:4] isnot# '/usr/'
let s:pystr .= " else:\n"
let s:pystr .= " import os\n"
let s:pystr .= " powerline_dir = os.path.dirname(os.path.realpath(powerline.__file__))\n"
let s:pystr .= " this_dir = os.path.dirname(os.path.realpath(vim.eval('expand(\"<sfile>:p\")')))\n"
let s:pystr .= " this_dir = os.path.dirname(os.path.dirname(os.path.dirname(this_dir)))\n"
let s:pystr .= " if os.path.basename(this_dir) != 'powerline':\n"
let s:pystr .= " print('Check your installation:')\n"
let s:pystr .= " print('this script is not in powerline[/bindings/vim/plugin] directory,')\n"
let s:pystr .= " print('neither it is installed system-wide')\n"
let s:pystr .= " this_dir = os.path.dirname(this_dir)\n"
let s:pystr .= " real_powerline_dir = os.path.realpath(powerline_dir)\n"
let s:pystr .= " real_this_dir = os.path.realpath(this_dir)\n"
let s:pystr .= " if real_this_dir != sys.path[-1]:\n"
let s:pystr .= " print('Check your installation:')\n"
let s:pystr .= " print('this script is symlinked somewhere where powerline is not present.')\n"
let s:pystr .= " elif real_powerline_dir != real_this_dir:\n"
let s:pystr .= " print('It appears that you have two powerline versions installed:')\n"
let s:pystr .= " print('one in ' + real_powerline_dir + ', other in ' + real_this_dir + '.')\n"
let s:pystr .= " print('You should remove one of this. Check out troubleshooting section,')\n"
let s:pystr .= " print('it contains some information about the alternatives.')\n"
endif
execute s:pycmd s:pystr
unlet s:pystr
unlet s:pycmd
unlet s:pyeval
finish finish
else else
unlet s:launched unlet s:launched
@ -45,3 +84,6 @@ endtry
execute s:pycmd 'import vim' execute s:pycmd 'import vim'
execute s:pycmd 'powerline_setup(pyeval=vim.eval("s:pyeval"), pycmd=vim.eval("s:pycmd"))' execute s:pycmd 'powerline_setup(pyeval=vim.eval("s:pyeval"), pycmd=vim.eval("s:pycmd"))'
execute s:pycmd 'del powerline_setup' execute s:pycmd 'del powerline_setup'
unlet s:pycmd
unlet s:pyeval