Closed DerWeh closed 3 years ago
I think it is related to Neovim's Python setup.
Try setting g:python3_host_prog
explicitly, e.g. to some virtualenv for it (but be aware that Jedi does not use Python 3.6 when the virtualenv is 3.5 etc).
Are you using Neovim master?
Are you using Python 2/3?
You could try profiling it really, see https://github.com/blueyed/dotfiles/blob/b0eb67e02475947e2f6180551f50dc4b5cc22f8b/vimrc#L7-L23 for something to use as a base.
Your timings (for reference):
118.031 000.029 000.029: sourcing /usr/share/nvim/runtime/ftplugin.vim
118.337 001.330 001.270: sourcing /home/USERNAME/.config/nvim/plugged/jedi-vim/plugin/jedi.vim
119.008 000.076 000.076: sourcing /home/USERNAME/.config/nvim/syntax/python.vim
539.125 000.379 000.379: sourcing /usr/share/nvim/runtime/autoload/provider/pythonx.vim
965.414 427.578 427.199: sourcing /usr/share/nvim/runtime/autoload/provider/python3.vim
1687.160 1567.476 1139.898: sourcing /home/USERNAME/.config/nvim/plugged/jedi-vim/autoload/jedi.vim
1687.652 1568.214 000.738: sourcing /home/USERNAME/.config/nvim/plugged/jedi-vim/after/syntax/python.vim
1689.339 000.521 000.521: sourcing /home/USERNAME/.config/nvim/plugged/jedi-vim/ftplugin/python/jedi.vim
1690.131 000.034 000.034: sourcing /usr/share/nvim/runtime/ftplugin/python.vim
1691.673 000.183 000.183: sourcing /home/USERNAME/.config/nvim/plugged/jedi-vim/after/ftplugin/python/jedi.vim
1692.341 000.087 000.087: sourcing /usr/share/nvim/runtime/indent/python.vim
1694.172 021.958: opening buffers
My timings when loading jedi-vim non-lazily, and opening a Python file
directly, using vim --cmd 'let g:profile = "/tmp/vim-profile.txt"' --startuptime /tmp/vim-startuptime.txt t.py
:
178.913 001.156: clearing screen
191.032 000.110 000.110: sourcing /home/user/.vim/ftplugin/python.vim
575.003 383.248 383.248: sourcing /home/user/.vim/plugged/jedi-vim/autoload/jedi.vim
575.502 383.935 000.687: sourcing /home/user/.vim/plugged/jedi-vim/ftplugin/python/jedi.vim
577.055 000.506 000.506: sourcing /usr/share/vim/vim80/ftplugin/python.vim
577.359 000.058 000.058: sourcing /home/user/.vim/plugged/jedi-vim/after/ftplugin/python/jedi.vim
582.932 005.485 005.485: sourcing /home/user/.vim/plugged/vim-textobj-python/after/ftplugin/python/textobj-python.vim
583.074 000.057 000.057: sourcing /home/user/.vim/after/ftplugin/python.vim
583.580 000.305 000.305: sourcing /home/user/.vim/plugged/vim-python-pep8-indent/indent/python.vim
583.835 000.020 000.020: sourcing /usr/share/vim/vim80/indent/python.vim
583.974 000.016 000.016: sourcing /home/user/.vim/ftplugin/python.vim
584.594 000.390 000.390: sourcing /home/user/.vim/plugged/jedi-vim/ftplugin/python/jedi.vim
585.959 000.397 000.397: sourcing /usr/share/vim/vim80/ftplugin/python.vim
586.220 000.044 000.044: sourcing /home/user/.vim/plugged/jedi-vim/after/ftplugin/python/jedi.vim
591.770 005.470 005.470: sourcing /home/user/.vim/plugged/vim-textobj-python/after/ftplugin/python/textobj-python.vim
591.933 000.060 000.060: sourcing /home/user/.vim/after/ftplugin/python.vim
592.436 000.340 000.340: sourcing /home/user/.vim/plugged/vim-python-pep8-indent/indent/python.vim
592.697 000.010 000.010: sourcing /usr/share/vim/vim80/indent/python.vim
594.200 000.714 000.714: sourcing /usr/share/vim/vim80/syntax/python.vim
594.461 000.167 000.167: sourcing /home/user/.vim/plugged/jedi-vim/after/syntax/python.vim
602.943 000.091 000.091: sourcing /home/user/.vim/plugged/vim-stay/autoload/stay.vim
604.989 000.297 000.297: sourcing /home/user/.dotfiles/.lvimrc
606.339 028.954: opening buffers
The slowest part from vim-profile.txt:
FUNCTION jedi#setup_py_version()
Called 1 time
Total time: 0.209877
Self time: 0.209877
1 0.209811 execute cmd_init.' '.s:script_path.'/initialize.py'
And there it's the import of jedi_vim.py that seems to be rather slow.
That's with Vim.
Using Neovim shows this:
FUNCTIONS SORTED ON TOTAL TIME
count total (s) self (s) function
2 0.382914 0.003407 <SNR>14_LoadFTPlugin()
1 0.382219 0.000160 <SNR>2_lod_ft()
5 0.376176 0.000179 <SNR>2_doautocmd()
6 0.365915 0.000142 jedi#init_python()
1 0.365774 0.185160 <SNR>116_init_python()
1 0.180614 0.000017 jedi#force_py_version()
1 0.180597 jedi#setup_py_version()
1 0.180501 0.097276 provider#python3#Call()
1 0.083225 0.000066 remote#host#Require()
1 0.083159 0.083146 provider#pythonx#Require()
FUNCTIONS SORTED ON SELF TIME
count total (s) self (s) function
1 0.365774 0.185160 <SNR>116_init_python()
1 0.180597 jedi#setup_py_version()
1 0.180501 0.097276 provider#python3#Call()
1 0.083159 0.083146 provider#pythonx#Require()
174.055 000.466: clearing screen
187.741 000.114 000.114: sourcing /home/user/.config/nvim/ftplugin/python.vim
555.183 366.876 366.876: sourcing /home/user/.vim/plugged/jedi-vim/autoload/jedi.vim
555.482 367.328 000.453: sourcing /home/user/.vim/plugged/jedi-vim/ftplugin/python/jedi.vim
556.538 000.237 000.237: sourcing /usr/share/nvim/runtime/ftplugin/python.vim
556.890 000.078 000.078: sourcing /home/user/.vim/plugged/jedi-vim/after/ftplugin/python/jedi.vim
562.535 005.559 005.559: sourcing /home/user/.vim/plugged/vim-textobj-python/after/ftplugin/python/textobj-python.vim
562.661 000.048 000.048: sourcing /home/user/.config/nvim/after/ftplugin/python.vim
563.135 000.284 000.284: sourcing /home/user/.vim/plugged/vim-python-pep8-indent/indent/python.vim
563.357 000.017 000.017: sourcing /usr/share/nvim/runtime/indent/python.vim
563.494 000.009 000.009: sourcing /home/user/.config/nvim/ftplugin/python.vim
564.012 000.255 000.255: sourcing /home/user/.vim/plugged/jedi-vim/ftplugin/python/jedi.vim
564.971 000.186 000.186: sourcing /usr/share/nvim/runtime/ftplugin/python.vim
565.258 000.042 000.042: sourcing /home/user/.vim/plugged/jedi-vim/after/ftplugin/python/jedi.vim
570.895 005.562 005.562: sourcing /home/user/.vim/plugged/vim-textobj-python/after/ftplugin/python/textobj-python.vim
571.009 000.038 000.038: sourcing /home/user/.config/nvim/after/ftplugin/python.vim
571.430 000.278 000.278: sourcing /home/user/.vim/plugged/vim-python-pep8-indent/indent/python.vim
571.665 000.010 000.010: sourcing /usr/share/nvim/runtime/indent/python.vim
572.954 000.646 000.646: sourcing /usr/share/nvim/runtime/syntax/python.vim
573.147 000.127 000.127: sourcing /home/user/.vim/plugged/jedi-vim/after/syntax/python.vim
580.903 000.070 000.070: sourcing /home/user/.vim/plugged/vim-stay/autoload/stay.vim
582.910 000.099 000.099: sourcing /home/user/.dotfiles/.lvimrc
605.780 050.738: opening buffers
Slow things there:
FUNCTION <SNR>116_init_python()
Called 1 time
Total time: 0.365774
Self time: 0.185160
1 0.185046 let s:def_py = system('python -c '.shellescape('import sys; sys.stdout.write(str(sys.version_info[0]))'))
…
" Make sure that the auto-detected version is available in Vim.
1 0.000017 if !has('nvim') || has('python'.(s:def_py == 2 ? '' : s:def_py))
1 0.180630 0.000016 return jedi#force_py_version(s:def_py)
endif
You could set g:jedi#force_py_version
to e.g. 3
to skip the system call.
Actually I think it might be a good thing to default to 3 here - I will look into creating a PR for that.
The other thing is initializing jedi-vim's Python module itself, which could be improved in some way, too - but needs more investigation.
FWIW, my jedi-vim config looks like this:
Plug 'davidhalter/jedi-vim', {'on': ['Pyimport', 'JediDebugInfo']}
function! s:my_plug_insertenter_python()
if &ft ==# 'python'
let plugs = ['jedi-vim']
if s:use_deoplete
let plugs += ['deoplete-jedi']
endif
call call('plug#load', plugs)
autocmd! vimplug_load_on_insertmode_python
if index(plugs, 'jedi-vim') != -1
try
call jedi#configure_call_signatures(1, 'i')
catch
call jedi#configure_call_signatures()
endtry
endif
endif
endfunction
augroup vimplug_load_on_insertmode_python
autocmd!
autocmd InsertEnter * call s:my_plug_insertenter_python()
augroup END
And the following to setup deoplete and others for insert mode in general:
function! s:my_plug_insertenter()
let plugs = ['cursorcross.vim', 'delimitMate']
if s:use_deoplete
let plugs += ['deoplete.nvim']
endif
call call('plug#load', plugs)
autocmd! vimplug_load_on_insertmode
endfunction
augroup vimplug_load_on_insertmode
autocmd!
autocmd InsertEnter * call s:my_plug_insertenter()
autocmd User deoplete.nvim call deoplete#enable()
augroup END
@DerWeh For reference, some helper scripts for profiling: https://github.com/blueyed/dotfiles/commit/51a32f385a821412eebf2170dbc5019860abe711
There wasn't ever an answer. I'm therefore closing.
Issue
I use neovim with jedi-vim. jedi-vim however has a massive effect on my startup time. My minimal vimrc is the following:
I profiled the startuptime time.txt as you can see jedi-vim has an enormous impact of 1.6s. Is there anything I can do to accelerate this unbearable delay? Or is it at least possible to lazily load it? I am only using it's refactor utilities and the awesome call signature preview. Can I maybe speed it up by disabling some functionality.