forked from VimPlug/jedi-vim
Key mapping <Leader>R: Rename vars/functions/classes without deleting the word under the cursor
This pull request also adds the support for 'set selection=exclusive' to the function 'rename_visual()' (bug fix). '<Leader>R' in Normal mode: --------------------------- Jedi-vim keeps the word under the cursor, moves the cursor to the end of the word, and puts Vim in insert mode, where the user is expected to enter the new variable name. '<Leader>R' in Visual mode: --------------------------- Use the selected text as the default answer to the prompt.
This commit is contained in:
@@ -207,6 +207,7 @@ get more information. If you set them to ``""``, they are not assigned.
|
|||||||
let g:jedi#usages_command = "<leader>n"
|
let g:jedi#usages_command = "<leader>n"
|
||||||
let g:jedi#completions_command = "<C-Space>"
|
let g:jedi#completions_command = "<C-Space>"
|
||||||
let g:jedi#rename_command = "<leader>r"
|
let g:jedi#rename_command = "<leader>r"
|
||||||
|
let g:jedi#rename_command_keep_name = "<leader>R"
|
||||||
|
|
||||||
An example for setting up your project:
|
An example for setting up your project:
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ let s:default_settings = {
|
|||||||
\ 'call_signatures_command': "'<leader>n'",
|
\ 'call_signatures_command': "'<leader>n'",
|
||||||
\ 'usages_command': "'<leader>n'",
|
\ 'usages_command': "'<leader>n'",
|
||||||
\ 'rename_command': "'<leader>r'",
|
\ 'rename_command': "'<leader>r'",
|
||||||
|
\ 'rename_command_keep_name': "'<leader>R'",
|
||||||
\ 'completions_enabled': 1,
|
\ 'completions_enabled': 1,
|
||||||
\ 'popup_on_dot': 'g:jedi#completions_enabled',
|
\ 'popup_on_dot': 'g:jedi#completions_enabled',
|
||||||
\ 'documentation_command': "'K'",
|
\ 'documentation_command': "'K'",
|
||||||
@@ -370,6 +371,14 @@ function! jedi#rename_visual(...) abort
|
|||||||
python3 jedi_vim.rename_visual()
|
python3 jedi_vim.rename_visual()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! jedi#rename_keep_name(...) abort
|
||||||
|
python3 jedi_vim.rename(delete_word=False)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! jedi#rename_visual_keep_name(...) abort
|
||||||
|
python3 jedi_vim.rename_visual(use_selected_text_as_prompt_answer=True)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! jedi#completions(findstart, base) abort
|
function! jedi#completions(findstart, base) abort
|
||||||
python3 jedi_vim.completions()
|
python3 jedi_vim.completions()
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
@@ -27,8 +27,9 @@ Contents *jedi-vim-contents*
|
|||||||
5.4 Go to stub |g:jedi#goto_stubs_command|
|
5.4 Go to stub |g:jedi#goto_stubs_command|
|
||||||
5.5. Show documentation |g:jedi#documentation_command|
|
5.5. Show documentation |g:jedi#documentation_command|
|
||||||
5.6. Rename variables |g:jedi#rename_command|
|
5.6. Rename variables |g:jedi#rename_command|
|
||||||
5.7. Show name usages |g:jedi#usages_command|
|
5.7. Rename variables (Reuse name) |g:jedi#rename_command_keep_name|
|
||||||
5.8. Open module by name |:Pyimport|
|
5.8. Show name usages |g:jedi#usages_command|
|
||||||
|
5.9. Open module by name |:Pyimport|
|
||||||
6. Configuration |jedi-vim-configuration|
|
6. Configuration |jedi-vim-configuration|
|
||||||
6.1. auto_initialization |g:jedi#auto_initialization|
|
6.1. auto_initialization |g:jedi#auto_initialization|
|
||||||
6.2. auto_vim_configuration |g:jedi#auto_vim_configuration|
|
6.2. auto_vim_configuration |g:jedi#auto_vim_configuration|
|
||||||
@@ -307,7 +308,19 @@ with the new one. The number of performed renames is displayed in the command
|
|||||||
line.
|
line.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
5.7. `g:jedi#usages_command` *g:jedi#usages_command*
|
5.7. `g:jedi#rename_command_keep_name` *g:jedi#rename_command_keep_name*
|
||||||
|
Function: `jedi#rename()`
|
||||||
|
Default: <leader>R Rename variables
|
||||||
|
(This key mapping does not delete the word under the cursor)
|
||||||
|
|
||||||
|
Jedi-vim keeps the word currently under the cursor, moves the cursor to the end
|
||||||
|
of the word, and puts Vim in insert mode, where the user is expected to enter
|
||||||
|
the new variable name. Upon leaving insert mode, Jedi-vim then renames all
|
||||||
|
occurrences of the old variable name with the new one. The number of performed
|
||||||
|
renames is displayed in the command line.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
5.8. `g:jedi#usages_command` *g:jedi#usages_command*
|
||||||
Function: `jedi#usages()`
|
Function: `jedi#usages()`
|
||||||
Default: <leader>n Show usages of a name.
|
Default: <leader>n Show usages of a name.
|
||||||
|
|
||||||
@@ -315,7 +328,7 @@ The quickfix window is populated with a list of all names which point to the
|
|||||||
definition of the name under the cursor.
|
definition of the name under the cursor.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
5.8. Open module by name *:Pyimport*
|
5.9. Open module by name *:Pyimport*
|
||||||
Function: `jedi#py_import(args)`
|
Function: `jedi#py_import(args)`
|
||||||
Default: :Pyimport e.g. `:Pyimport os` shows os.py in VIM.
|
Default: :Pyimport e.g. `:Pyimport os` shows os.py in VIM.
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ if g:jedi#auto_initialization
|
|||||||
execute 'nnoremap <buffer> '.g:jedi#rename_command.' :call jedi#rename()<CR>'
|
execute 'nnoremap <buffer> '.g:jedi#rename_command.' :call jedi#rename()<CR>'
|
||||||
execute 'vnoremap <buffer> '.g:jedi#rename_command.' :call jedi#rename_visual()<CR>'
|
execute 'vnoremap <buffer> '.g:jedi#rename_command.' :call jedi#rename_visual()<CR>'
|
||||||
endif
|
endif
|
||||||
|
if len(g:jedi#rename_command_keep_name)
|
||||||
|
execute 'nnoremap <buffer> '.g:jedi#rename_command_keep_name.' :call jedi#rename_keep_name()<CR>'
|
||||||
|
execute 'vnoremap <buffer> '.g:jedi#rename_command_keep_name.' :call jedi#rename_visual_keep_name()<CR>'
|
||||||
|
endif
|
||||||
" documentation/pydoc
|
" documentation/pydoc
|
||||||
if len(g:jedi#documentation_command)
|
if len(g:jedi#documentation_command)
|
||||||
execute 'nnoremap <silent> <buffer>'.g:jedi#documentation_command.' :call jedi#show_documentation()<CR>'
|
execute 'nnoremap <silent> <buffer>'.g:jedi#documentation_command.' :call jedi#show_documentation()<CR>'
|
||||||
|
|||||||
@@ -998,7 +998,7 @@ def cmdline_call_signatures(signatures):
|
|||||||
|
|
||||||
@_check_jedi_availability(show_error=True)
|
@_check_jedi_availability(show_error=True)
|
||||||
@catch_and_print_exceptions
|
@catch_and_print_exceptions
|
||||||
def rename():
|
def rename(delete_word=True):
|
||||||
if not int(vim.eval('a:0')):
|
if not int(vim.eval('a:0')):
|
||||||
# Need to save the cursor position before insert mode
|
# Need to save the cursor position before insert mode
|
||||||
cursor = vim.current.window.cursor
|
cursor = vim.current.window.cursor
|
||||||
@@ -1010,7 +1010,12 @@ def rename():
|
|||||||
|
|
||||||
vim_command("let s:jedi_replace_orig = expand('<cword>')")
|
vim_command("let s:jedi_replace_orig = expand('<cword>')")
|
||||||
line = vim_eval('getline(".")')
|
line = vim_eval('getline(".")')
|
||||||
vim_command('normal! diw')
|
|
||||||
|
if delete_word:
|
||||||
|
vim_command('normal! diw')
|
||||||
|
else:
|
||||||
|
vim_command('normal! yiwel')
|
||||||
|
|
||||||
if re.match(r'\w+$', line[cursor[1]:]):
|
if re.match(r'\w+$', line[cursor[1]:]):
|
||||||
# In case the deleted word is at the end of the line we need to
|
# In case the deleted word is at the end of the line we need to
|
||||||
# move the cursor to the end.
|
# move the cursor to the end.
|
||||||
@@ -1042,9 +1047,17 @@ def rename():
|
|||||||
return do_rename(replace)
|
return do_rename(replace)
|
||||||
|
|
||||||
|
|
||||||
def rename_visual():
|
def rename_visual(use_selected_text_as_prompt_answer=False):
|
||||||
replace = vim.eval('input("Rename to: ")')
|
orig = vim.eval('getline(".")[(getpos("\'<")[2]-1):getpos("\'>")[2]'
|
||||||
orig = vim.eval('getline(".")[(getpos("\'<")[2]-1):getpos("\'>")[2]]')
|
'-((&selection ==# "exclusive") ? 2 : 1)]')
|
||||||
|
|
||||||
|
input_text = ""
|
||||||
|
if use_selected_text_as_prompt_answer:
|
||||||
|
input_text = orig
|
||||||
|
|
||||||
|
replace = vim.eval(
|
||||||
|
'input("Rename to:", "{}")'.format(PythonToVimStr(input_text))
|
||||||
|
)
|
||||||
do_rename(replace, orig)
|
do_rename(replace, orig)
|
||||||
|
|
||||||
|
|
||||||
@@ -1056,6 +1069,10 @@ def do_rename(replace, orig=None):
|
|||||||
if orig is None:
|
if orig is None:
|
||||||
orig = vim_eval('s:jedi_replace_orig')
|
orig = vim_eval('s:jedi_replace_orig')
|
||||||
|
|
||||||
|
if orig == replace:
|
||||||
|
echo_highlight('Jedi did 0 renames.')
|
||||||
|
return
|
||||||
|
|
||||||
# Save original window / tab.
|
# Save original window / tab.
|
||||||
saved_tab = int(vim_eval('tabpagenr()'))
|
saved_tab = int(vim_eval('tabpagenr()'))
|
||||||
saved_win = int(vim_eval('winnr()'))
|
saved_win = int(vim_eval('winnr()'))
|
||||||
|
|||||||
Reference in New Issue
Block a user