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
|
@catch_and_print_exceptions
|
||||||
def rename():
|
def rename():
|
||||||
if not int(vim.eval('a:0')):
|
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('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('augroup END')
|
||||||
|
|
||||||
vim_command("let s:jedi_replace_orig = expand('<cword>')")
|
vim_command("let s:jedi_replace_orig = expand('<cword>')")
|
||||||
@@ -520,6 +524,10 @@ def rename():
|
|||||||
# Remove autocommand.
|
# Remove autocommand.
|
||||||
vim_command('autocmd! jedi_rename InsertLeave')
|
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.
|
# Get replacement, if there is something on the cursor.
|
||||||
# This won't be the case when the user ends insert mode right away,
|
# This won't be the case when the user ends insert mode right away,
|
||||||
# and `<cword>` would pick up the nearest word instead.
|
# and `<cword>` would pick up the nearest word instead.
|
||||||
@@ -528,13 +536,7 @@ def rename():
|
|||||||
else:
|
else:
|
||||||
replace = None
|
replace = None
|
||||||
|
|
||||||
cursor = vim.current.window.cursor
|
vim_command('undo {}'.format(changenr))
|
||||||
|
|
||||||
# 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.current.window.cursor = cursor
|
vim.current.window.cursor = cursor
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user