Loading ...
Sorry, an error occurred while loading the content.

Re: how can you delete every line between two phrases?

Expand Messages
  • Jiaxing Wang
    ... Hi,tim In :g/how are you?/.;/:-)/d, Is /how are you?/.;/:-)/ the pattern in ... Would you mind explaining this pattern a little? I don t quite
    Message 1 of 8 , Dec 2, 2012
    • 0 Attachment
      On Sat 17 Nov 2012 12:00:38 PM CST, Tim Chase wrote:
      > On 11/16/12 21:22, Tony Mechelynck wrote:
      >> The above implements a linewise deletion. For characterwise, you can use
      >>
      >> :%s/how are you?\zs\_.*\ze:-)//e
      >>
      >> Notes:
      >> - If there are several matching pairs, this subsitute will remove from
      >> the first "how are you" to the last ":-)".
      >
      > Which you can then tweak by changing the "*" to "\{-}"
      >
      > If you want to do it line-wise and you have multiple instances in
      > the file, you can do something like
      >
      > :g/how are you?/.;/:-)/d
      >
      > to delete them inclusive, or
      >
      > :g/how are you?/+;/:-)/-d
      >
      > (the "+" bumps the starting line forward one from the match, the "-"
      > bumps it back one line from the ending match).
      >
      > And if you have multiple files to do it across, you can use
      > windo/bufdo/argdo/tabdo to prefix the command (either setting
      > 'hidden' beforehand or writing the file as well)
      >
      > -tim
      >
      >

      Hi,tim
      In :g/how are you?/.;/:-)/d,
      Is '/how are you?/.;/:-)/' the pattern in
      :[range]g[lobal]/{pattern}/[cmd]?
      Would you mind explaining this pattern a little? I don't quite
      understand this, thanks.

      --
      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
    • stosss
      ... I looked at :help :range as Tim suggested above. Just want to see if I understand correctly. Does vim do addressing like sed? That seems to be what I see.
      Message 2 of 8 , Dec 2, 2012
      • 0 Attachment
        On Sun, Dec 2, 2012 at 9:39 PM, Tim Chase <vim@...> wrote:
        > On 12/02/12 20:15, Jiaxing Wang wrote:
        >> In :g/how are you?/.;/:-)/d,
        >> Is '/how are you?/.;/:-)/' the pattern in
        >> :[range]g[lobal]/{pattern}/[cmd]?
        >> Would you mind explaining this pattern a little? I don't quite
        >> understand this, thanks.
        >
        > Using your template of ":[range]global]/{pattern}/[cmd]" it breaks
        > down as
        >
        > :g/how are you?/[cmd]
        >
        > where [cmd] is
        >
        > .;/:-)/d
        >
        > which is a range from the currently matching "how are you?" line
        > through the next line containing ":-)". The Ex command issued over
        > that range is "d"elete. If you read at
        >
        > :help :range
        >
        > you'll see the "/" is a way of specifying an address. You can even
        > stack them if you want, such as
        >
        > +3;/hello/?world?+2
        >
        > which will start the range 3 lines after the currently matching
        > line, and end the range at the location found by searching forwards
        > to "hello", then backwards to "world", and then going forwards two
        > lines. It's a bit of a crazy example, but sometimes that's exactly
        > what you need to specify the range you want. A recent real-world
        > example from my own use was something like:
        >
        > :g/^\s*def [^(]*[pP]rovider/+1;'}?DEBUG?s/^/#
        >
        > which commented out ("s/^/#") the lines in Python code after the
        > function definition, through the last DEBUG in the current paragraph
        > (as marked by '}).
        >
        > The difference between using ";" (as I do) and using "," is one of
        > those things I don't fully grasp as it seems to be fairly
        > interchangeable in other contexts. But in this use-case as a
        > destination for :g commands, I find that I almost always want ";".
        > This is tersely documented at
        >
        > :help :;
        >
        > I hope that helps disassemble my answer so that you can go do crazy
        > things with vim and impress your colleagues, too. :-)
        >
        > -tim


        I looked at :help :range as Tim suggested above. Just want to see if I
        understand correctly. Does vim do addressing like sed? That seems to
        be what I see.

        --
        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
      • Tim Chase
        ... Yes, only better. Sed has a difficult time going backwards (you have to gather things up in the hold space or in the current buffer). Vim has no problems
        Message 3 of 8 , Dec 2, 2012
        • 0 Attachment
          On 12/02/12 20:46, stosss wrote:
          > On Sun, Dec 2, 2012 at 9:39 PM, Tim Chase <vim@...> wrote:
          >> On 12/02/12 20:15, Jiaxing Wang wrote:
          >>> In :g/how are you?/.;/:-)/d,
          >>> Is '/how are you?/.;/:-)/' the pattern in
          >>> :[range]g[lobal]/{pattern}/[cmd]?
          >>> Would you mind explaining this pattern a little? I don't quite
          >>> understand this, thanks.
          >>
          >> [snip my rambling about ranges]
          >
          > I looked at :help :range as Tim suggested above. Just want to see if I
          > understand correctly. Does vim do addressing like sed? That seems to
          > be what I see.

          Yes, only better. Sed has a difficult time going backwards (you
          have to gather things up in the hold space or in the current
          buffer). Vim has no problems marching all over your document, so
          you can use marks, relative & absolute line numbering, searching
          forwards and backwards, or any chain of those you want in any order
          that suits your needs.

          -tim




          --
          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
        Your message has been successfully submitted and would be delivered to recipients shortly.