diff --git a/autoload/jedi.vim b/autoload/jedi.vim index c545886..9243418 100644 --- a/autoload/jedi.vim +++ b/autoload/jedi.vim @@ -34,7 +34,8 @@ let s:default_settings = { \ 'quickfix_window_height': 10, \ 'completions_enabled': 1, \ 'force_py_version': "'auto'", - \ 'smart_auto_mappings': 1 + \ 'smart_auto_mappings': 1, + \ 'use_tag_stack': 1 \ } for [s:key, s:val] in items(s:deprecations) diff --git a/doc/jedi-vim.txt b/doc/jedi-vim.txt index 998e929..1fc4674 100644 --- a/doc/jedi-vim.txt +++ b/doc/jedi-vim.txt @@ -43,6 +43,7 @@ Contents *jedi-vim-contents* 6.11. use_splits_not_buffers |g:jedi#use_splits_not_buffers| 6.12. force_py_version |g:jedi#force_py_version| 6.13. smart_auto_mappings |g:jedi#smart_auto_mappings| + 6.14. use_tag_stack |g:jedi#use_tag_stack| 7. Testing |jedi-vim-testing| 8. Contributing |jedi-vim-contributing| 9. License |jedi-vim-license| @@ -506,6 +507,15 @@ This option can be disabled in the .vimrc: Options: 0 or 1 Default: 1 (enabled by default) +------------------------------------------------------------------------------ +6.14. `g:jedi#use_tag_stack` *g:jedi#use_tag_stack* + +Write results of |jedi#goto| to a temporary file and use the *:tjump* command +to enable full *tagstack* functionality. + +Options: 0 or 1 +Default: 1 (enabled by default) + ============================================================================== 7. Testing *jedi-vim-testing* diff --git a/jedi_vim.py b/jedi_vim.py index 7f24b9e..c2b656f 100644 --- a/jedi_vim.py +++ b/jedi_vim.py @@ -7,6 +7,9 @@ import traceback # for exception output import re import os import sys +import tempfile +import string +import random from shlex import split as shsplit try: from itertools import zip_longest @@ -243,11 +246,25 @@ def goto(mode="goto", no_output=False): echo_highlight("Builtin modules cannot be displayed (%s)." % d.desc_with_module) else: - if d.module_path != vim.current.buffer.name: - result = new_buffer(d.module_path) - if not result: - return [] - vim.current.window.cursor = d.line, d.column + if vim_eval('g:jedi#use_tag_stack') == '1': + with tempfile.NamedTemporaryFile('w') as f: + tagname = d.name + while vim_eval('taglist("^%s$")' % tagname) != []: + tagname = d.name + ' ' + ''.join( + [random.choice(string.lowercase) + for _ in range(4)]) + f.write('{0}\t{1}\t{2}'.format(tagname, d.module_path, + 'call cursor({0}, {1})'.format(d.line, d.column + 1))) + f.seek(0) + vim.command('set tags+=%s' % f.name) + vim.command('tjump %s' % tagname) + vim.command('set tags-=%s' % f.name) + else: + if d.module_path != vim.current.buffer.name: + result = new_buffer(d.module_path) + if not result: + return [] + vim.current.window.cursor = d.line, d.column else: # multiple solutions lst = []