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 30def main(): 31 binary = 'clang-rename' 32 if vim.eval('exists("g:clang_rename_path")') == "1": 33 binary = vim.eval('g:clang_rename_path') 34 35 # Get arguments for clang-rename binary. 36 offset = int(vim.eval('line2byte(line("."))+col(".")')) - 2 37 if offset < 0: 38 print('Couldn\'t determine cursor position. Is your file empty?', 39 file=sys.stderr) 40 return 41 filename = vim.current.buffer.name 42 43 new_name_request_message = 'type new name:' 44 new_name = vim.eval("input('{}\n')".format(new_name_request_message)) 45 46 # Call clang-rename. 47 command = [binary, 48 filename, 49 '-i', 50 '-offset', str(offset), 51 '-new-name', str(new_name)] 52 # FIXME: make it possible to run the tool on unsaved file. 53 p = subprocess.Popen(command, 54 stdout=subprocess.PIPE, 55 stderr=subprocess.PIPE) 56 stdout, stderr = p.communicate() 57 58 if stderr: 59 print(stderr) 60 61 # Reload all buffers in Vim. 62 vim.command("checktime") 63 64 65if __name__ == '__main__': 66 main() 67