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