So far, I have been manually refactoring code by using the find-and-replace operation

%s:/stringiwanttoreplace/newstring/g 

in vim.

But this is a slow and laborious process if I have stringiwanttoreplace in many files inside a specific directory.

My current/typical slow and laborious process involves a grep:-

grep -rn "stringiwanttoreplace" .

in my terminal to reveal all the locations/filenames where stringiwanttoreplace are; and now that I know which files contain stringiwanttoreplace, I will open each file one-by-one to perform the find-and-replace operation in each file.

Is there a more efficient workflow (in vim) to get this done?

CLARIFICATION: I would prefer a vim-based solution instead of a bash script/one-liner.

Edit
Report