forked from VimPlug/jedi-vim
Merge pull request #549 from mozbugbox/rename-fix
Fix renaming: cursor pos and undo tracking (#545, #502)
This commit is contained in:
18
jedi_vim.py
18
jedi_vim.py
@@ -507,8 +507,12 @@ def cmdline_call_signatures(signatures):
|
||||
@catch_and_print_exceptions
|
||||
def rename():
|
||||
if not int(vim.eval('a:0')):
|
||||
# Need to save the cursor position before insert mode
|
||||
cursor = vim.current.window.cursor
|
||||
changenr = vim.eval('changenr()') # track undo tree
|
||||
vim_command('augroup jedi_rename')
|
||||
vim_command('autocmd InsertLeave <buffer> call jedi#rename(1)')
|
||||
vim_command('autocmd InsertLeave <buffer> call jedi#rename'
|
||||
'({}, {}, {})'.format(cursor[0], cursor[1], changenr))
|
||||
vim_command('augroup END')
|
||||
|
||||
vim_command("let s:jedi_replace_orig = expand('<cword>')")
|
||||
@@ -520,6 +524,10 @@ def rename():
|
||||
# Remove autocommand.
|
||||
vim_command('autocmd! jedi_rename InsertLeave')
|
||||
|
||||
args = vim.eval('a:000')
|
||||
cursor = tuple(int(x) for x in args[:2])
|
||||
changenr = args[2]
|
||||
|
||||
# Get replacement, if there is something on the cursor.
|
||||
# This won't be the case when the user ends insert mode right away,
|
||||
# and `<cword>` would pick up the nearest word instead.
|
||||
@@ -528,13 +536,7 @@ def rename():
|
||||
else:
|
||||
replace = None
|
||||
|
||||
cursor = vim.current.window.cursor
|
||||
|
||||
# Undo new word, but only if something was changed, which is not the
|
||||
# case when ending insert mode right away.
|
||||
if vim_eval('b:changedtick != s:jedi_changedtick') == '1':
|
||||
vim_command('normal! u') # Undo new word.
|
||||
vim_command('normal! u') # Undo diw.
|
||||
vim_command('undo {}'.format(changenr))
|
||||
|
||||
vim.current.window.cursor = cursor
|
||||
|
||||
|
||||
Reference in New Issue
Block a user