On Thu, Dec 1, 2011 at 11:20 PM, Tim Chase <[email protected]> wrote:
> On 12/01/11 22:11, Rick R wrote: > >> I often will find a multi line snippet of text that I'd like >> to then replace in multiple files in my project after a >> certain block of text (maybe it's some javascript for example >> so I'll want the multiple lines pasted after the >> initial<script> tag.) >> >> How do I do this easily in vim (or MacVim/gVim if those gui >> editors on top can help?) >> > > Without particulars, it's a bit hard to give a concrete example. In the > general case, it sounds like you want to mix a combination of an > argdo/windo/bufdo/tabdo command (to iterate over all the associated > buffers/windows) and issue a search&replace (or insertion) command anchored > at at a given text. Thus you might have something like > > :windo %s/block_of_text\zsmulti\**nline\ntext/replacement > > or > > :set hidden > :bufdo g/block_of_text/sil! put='some text to put after' > (verify it all looks good) > :wall > > If you have content in the clipboard you want to paste after each line, > you can do > > :[whatever]do g/where_to_put_it/put=@* > > I'm still having trouble with this. I actually want it to replace the text in multiple files that aren't opened. I thought about trying to use sed but for the life of me I can't figure out how to get the replace/append portion of text to work with multiple lines of the text I want to replace with? For example if I have the following text in an html file: <body> Now I have multiple lines I want to add after that I've copied from a website..... foo bar foo bar I want to append them after <body> in all the html files in the directory. With sed I couldn't figure out (from googling) how I could replace the multiple line text that I have... as soon as i'd paste that into the terminal it would obviously cause line breaks. Using what you suggested in vim I though maybe I could do something like: :args *.html :argdo g/<body>/put=@* But when try that (and I know in the above I'd lose the <body> tag if it worked) all I get is <body> highlighted in the file displayed. Any more suggestions appreciated. > The reason for the 'hidden' is that Vim won't let you leave a modified > buffer unless it's set. With :windo or :tabdo it's not a problem because > they aren't closed, but with argdo/bufdo, they leave the current (modified) > buffer to progress to the next. If you're feeling reckless, you can > include a ":w" after your command to also write the file out before leaving > it (with the caveats listed at ":help :bar" regarding commands that may > require an :exec ) > > Hope this points you in the right direction. With greater detail from > you, perhaps more detailed help can be given :) > > -tim > > > > -- Rick R -- You received this message from the "vim_use" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php
