|  | """ | 
|  | Minimal clang-rename integration with Vim. | 
|  |  | 
|  | Before installing make sure one of the following is satisfied: | 
|  |  | 
|  | * clang-rename is in your PATH | 
|  | * `g:clang_rename_path` in ~/.vimrc points to valid clang-rename executable | 
|  | * `binary` in clang-rename.py points to valid to clang-rename executable | 
|  |  | 
|  | To install, simply put this into your ~/.vimrc for python2 support | 
|  |  | 
|  | noremap <leader>cr :pyf <path-to>/clang-rename.py<cr> | 
|  |  | 
|  | For python3 use the following command (note the change from :pyf to :py3f) | 
|  |  | 
|  | noremap <leader>cr :py3f <path-to>/clang-rename.py<cr> | 
|  |  | 
|  | IMPORTANT NOTE: Before running the tool, make sure you saved the file. | 
|  |  | 
|  | All you have to do now is to place a cursor on a variable/function/class which | 
|  | you would like to rename and press '<leader>cr'. You will be prompted for a new | 
|  | name if the cursor points to a valid symbol. | 
|  | """ | 
|  |  | 
|  | from __future__ import absolute_import, division, print_function | 
|  | import vim | 
|  | import subprocess | 
|  | import sys | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | binary = "clang-rename" | 
|  | if vim.eval('exists("g:clang_rename_path")') == "1": | 
|  | binary = vim.eval("g:clang_rename_path") | 
|  |  | 
|  | # Get arguments for clang-rename binary. | 
|  | offset = int(vim.eval('line2byte(line("."))+col(".")')) - 2 | 
|  | if offset < 0: | 
|  | print( | 
|  | "Couldn't determine cursor position. Is your file empty?", file=sys.stderr | 
|  | ) | 
|  | return | 
|  | filename = vim.current.buffer.name | 
|  |  | 
|  | new_name_request_message = "type new name:" | 
|  | new_name = vim.eval("input('{}\n')".format(new_name_request_message)) | 
|  |  | 
|  | # Call clang-rename. | 
|  | command = [ | 
|  | binary, | 
|  | filename, | 
|  | "-i", | 
|  | "-offset", | 
|  | str(offset), | 
|  | "-new-name", | 
|  | str(new_name), | 
|  | ] | 
|  | # FIXME: make it possible to run the tool on unsaved file. | 
|  | p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | 
|  | stdout, stderr = p.communicate() | 
|  |  | 
|  | if stderr: | 
|  | print(stderr) | 
|  |  | 
|  | # Reload all buffers in Vim. | 
|  | vim.command("checktime") | 
|  |  | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | main() |