vim search & replace string with a file content. —
Today, a colleague of mine came with an interesting question: how can I search & replace a string with the content of a file. I naturally tought to vim.
I started digging, but couldn’t find a direct way to do it. So, I decided to use a named buffer to hold the content file.
So let’s say that you are editing a file A (current buffer) and want to replace all occurences of MyOldString with the content of MyOtherFile.txt.
Here is the way to do it:
While editing your file, type the following commands:
:edit MyOtherFile.txt gg"ayG :bdelete :%s/MyOldString/\=@a/g
Some explanation:
:edit MyOtherFile.txt
This command creates a new buffer and open the file MyOtherFileFile.txt.gg
Go to the top of the file."a
Use named buffer ayG
Yank (y) all text (G):bdelete
delete the file buffer (MyOtherFile.txt) and go back to the original file:%s/MyOldString/\=@a/g
search the whole file (:%s) for the string MyOldString and replace it with the content of named buffer (\=@a) for all occurences (g).
This is quite usefull in some case. This could be transformed in a named macro…
Any other method to vim search & replace string with a file content (or without viw) is welcome.
Categorised as: DevOps
Leave a Reply