1""" 2Minimal clang-rename integration with Vim. 3 4Before installing make sure one of the following is satisfied: 5 6* clang-rename is in your PATH 7* `g:clang_rename_path` in ~/.vimrc points to valid clang-rename executable 8* `binary` in clang-rename.py points to valid to clang-rename executable 9 10To install, simply put this into your ~/.vimrc for python2 support 11 12 noremap <leader>cr :pyf <path-to>/clang-rename.py<cr> 13 14For python3 use the following command (note the change from :pyf to :py3f) 15 16 noremap <leader>cr :py3f <path-to>/clang-rename.py<cr> 17 18IMPORTANT NOTE: Before running the tool, make sure you saved the file. 19 20All you have to do now is to place a cursor on a variable/function/class which 21you would like to rename and press '<leader>cr'. You will be prompted for a new 22name if the cursor points to a valid symbol. 23""" 24 25from __future__ import absolute_import, division, print_function 26import vim 27import subprocess 28import sys 29 30 31def main(): 32 binary = "clang-rename" 33 if vim.eval('exists("g:clang_rename_path")') == "1": 34 binary = vim.eval("g:clang_rename_path") 35 36 # Get arguments for clang-rename binary. 37 offset = int(vim.eval('line2byte(line("."))+col(".")')) - 2 38 if offset < 0: 39 print( 40 "Couldn't determine cursor position. Is your file empty?", file=sys.stderr 41 ) 42 return 43 filename = vim.current.buffer.name 44 45 new_name_request_message = "type new name:" 46 new_name = vim.eval("input('{}\n')".format(new_name_request_message)) 47 48 # Call clang-rename. 49 command = [ 50 binary, 51 filename, 52 "-i", 53 "-offset", 54 str(offset), 55 "-new-name", 56 str(new_name), 57 ] 58 # FIXME: make it possible to run the tool on unsaved file. 59 p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 60 stdout, stderr = p.communicate() 61 62 if stderr: 63 print(stderr) 64 65 # Reload all buffers in Vim. 66 vim.command("checktime") 67 68 69if __name__ == "__main__": 70 main() 71