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

select text between brackets or quotes

Expand Messages
  • gabor
    hi, what is the simplest way to select the text between two brackets (parentheses, quotes) so that the selection does not include the brackets? basically i
    Message 1 of 12 , Sep 1, 2007
    • 0 Attachment
      hi,

      what is the simplest way to select the text between two brackets
      (parentheses, quotes) so that the selection does not include the
      brackets?

      basically i want to replace the content of the brackets while the
      cursor is located anywher inside. i can use the command %v% to make a
      selection including the brackets, however i'd like to exclude them.

      another question is how to do the same for quoted strings?

      cheers,
      gabor


      --~--~---------~--~----~------------~-------~--~----~
      You received this message from the "vim_use" maillist.
      For more information, visit http://www.vim.org/maillist.php
      -~----------~----~----~----~------~----~------~--~---
    • Franco Saliola
      ... Probably ci) and ci Read this as (c)hange (i)nner ) . There is also ciw for change inner word. And you can replace the c with a d for delete. Franco --
      Message 2 of 12 , Sep 1, 2007
      • 0 Attachment
        On 9/1/07, gabor <gabor.bernath@...> wrote:

        > what is the simplest way to select the text between two brackets
        > (parentheses, quotes) so that the selection does not include the
        > brackets?

        Probably

        ci)

        and

        ci"

        Read this as "(c)hange (i)nner )". There is also ciw for change inner word.

        And you can replace the c with a d for delete.

        Franco

        --

        --~--~---------~--~----~------------~-------~--~----~
        You received this message from the "vim_use" maillist.
        For more information, visit http://www.vim.org/maillist.php
        -~----------~----~----~----~------~----~------~--~---
      • Tim Chase
        ... which allow you to do things like vi[ to go Visual with the Inner contents of the [ . This works anywhere within the [...] region (including on the
        Message 3 of 12 , Sep 1, 2007
        • 0 Attachment
          > what is the simplest way to select the text between two brackets
          > (parentheses, quotes) so that the selection does not include the
          > brackets?


          Sounds like you want to use text objects:

          :help text-objects

          which allow you to do things like

          vi[

          to "go Visual with the Inner contents of the '['". This works
          anywhere within the "[...]" region (including on the brackets
          themselves).

          Since vim7, there are now "quote" text objects too (yay! a
          feature I requested and got :)

          vi"

          and

          vi'

          (though the quote versions aren't multi-line like the [/(/{
          versions are, which occasionally bites me when writing python
          code and using multi-line """...""" strings, but I've learned
          just not to expect that to work yet)

          Since text-objects are pseudo-motions, they can be applied
          directly to many objects, so if you want to yank the contents of
          the "[...]", you can "yi["; if you want to fold the current
          multi-line "{...}" block, you can "zfi{", and if you want to
          change the contents of the current string, you can use

          ci"

          There are also "outer" variants using "a" instead of "i" which
          include the outer characters rather than excluding them. This
          may also end up including leading whitespace.

          Hope this helps,

          -tim



          --~--~---------~--~----~------------~-------~--~----~
          You received this message from the "vim_use" maillist.
          For more information, visit http://www.vim.org/maillist.php
          -~----------~----~----~----~------~----~------~--~---
        • Tony Mechelynck
          ... What you need is object selection: see ... The latter two only work within one line; the rest can span line breaks. For instance, vi visually selects the
          Message 4 of 12 , Sep 1, 2007
          • 0 Attachment
            gabor wrote:
            > hi,
            >
            > what is the simplest way to select the text between two brackets
            > (parentheses, quotes) so that the selection does not include the
            > brackets?
            >
            > basically i want to replace the content of the brackets while the
            > cursor is located anywher inside. i can use the command %v% to make a
            > selection including the brackets, however i'd like to exclude them.
            >
            > another question is how to do the same for quoted strings?
            >
            > cheers,
            > gabor

            What you need is object selection:

            see
            :help i(
            :help i[
            :help i{
            :help i<
            :help i"
            :help i'

            The latter two only work within one line; the rest can span line breaks.

            For instance, vi" visually selects the inner double-quoted string, excluding
            the quotes.


            Best regards,
            Tony.
            --
            Good day to avoid cops. Crawl to school.

            --~--~---------~--~----~------------~-------~--~----~
            You received this message from the "vim_use" maillist.
            For more information, visit http://www.vim.org/maillist.php
            -~----------~----~----~----~------~----~------~--~---
          • gabor
            cool! this is exactly what i was looking for. thanks to all of you for the elaborate answers. good to see that vim has such a helpful community. gabor ...
            Message 5 of 12 , Sep 1, 2007
            • 0 Attachment
              cool! this is exactly what i was looking for.

              thanks to all of you for the elaborate answers.
              good to see that vim has such a helpful community.

              gabor


              On Sep 1, 3:12 pm, Tim Chase <v...@...> wrote:
              > > what is the simplest way to select the text between two brackets
              > > (parentheses, quotes) so that the selection does not include the
              > > brackets?
              >
              > Sounds like you want to use text objects:
              >
              > :help text-objects
              >
              > which allow you to do things like
              >
              > vi[
              >
              > to "go Visual with the Inner contents of the '['". This works
              > anywhere within the "[...]" region (including on the brackets
              > themselves).
              >
              > Since vim7, there are now "quote" text objects too (yay! a
              > feature I requested and got :)
              >
              > vi"
              >
              > and
              >
              > vi'
              >
              > (though the quote versions aren't multi-line like the [/(/{
              > versions are, which occasionally bites me when writing python
              > code and using multi-line """...""" strings, but I've learned
              > just not to expect that to work yet)
              >
              > Since text-objects are pseudo-motions, they can be applied
              > directly to many objects, so if you want to yank the contents of
              > the "[...]", you can "yi["; if you want to fold the current
              > multi-line "{...}" block, you can "zfi{", and if you want to
              > change the contents of the current string, you can use
              >
              > ci"
              >
              > There are also "outer" variants using "a" instead of "i" which
              > include the outer characters rather than excluding them. This
              > may also end up including leading whitespace.
              >
              > Hope this helps,
              >
              > -tim


              --~--~---------~--~----~------------~-------~--~----~
              You received this message from the "vim_use" maillist.
              For more information, visit http://www.vim.org/maillist.php
              -~----------~----~----~----~------~----~------~--~---
            • Dave Land
              ... This discussion also reminded me of a very handy mapping that some here may enjoy... I do lots of HTML (actually, JSP) editing in my work, and so
              Message 6 of 12 , Sep 1, 2007
              • 0 Attachment
                On Sep 1, 2007, at 7:48 AM, gabor wrote:

                > cool! this is exactly what i was looking for.
                >
                > thanks to all of you for the elaborate answers.
                > good to see that vim has such a helpful community.

                This discussion also reminded me of a very handy mapping that some
                here may enjoy...

                I do lots of HTML (actually, JSP) editing in my work, and so frequently
                have need to select the "innerHTML" of an pair of tags. I have installed
                matchit.vim(1) and set the following in my .vimrc:

                let b:match_words='<\([\:0-9A-Za-z_-]\+\)[^>]*>:<\/\1[^>]*>,<%:%>'

                That match_words string works nearly all of the time for HTML, XML, and
                so forth, but occasionally fails if the capitalization of the tags does
                not match -- it'll match forward, but not backwards.

                Then, I set the following mapping (I use a Mac, so I chose option-A
                because it is similar to command-A, which is "select all"):

                map å Vk%k

                I put the cursor on the first line of the "innerHTML" I want to select,
                then use the mapping, which goes up to the opening tag, uses % to find
                the appropriate closing tag, then goes up again to deselect the closing
                tag. Voilá -- I've selected the contents of a pair of tags.

                Dave

                (1) http://www.vim.org/scripts/script.php?script_id=39

                --~--~---------~--~----~------------~-------~--~----~
                You received this message from the "vim_use" maillist.
                For more information, visit http://www.vim.org/maillist.php
                -~----------~----~----~----~------~----~------~--~---
              • Tony Mechelynck
                ... The above mapping (using V = linewise-visual) seems to imply that each HTML tag is always alone on its line. What about some text with bold,
                Message 7 of 12 , Sep 1, 2007
                • 0 Attachment
                  Dave Land wrote:
                  > On Sep 1, 2007, at 7:48 AM, gabor wrote:
                  >
                  >> cool! this is exactly what i was looking for.
                  >>
                  >> thanks to all of you for the elaborate answers.
                  >> good to see that vim has such a helpful community.
                  >
                  > This discussion also reminded me of a very handy mapping that some
                  > here may enjoy...
                  >
                  > I do lots of HTML (actually, JSP) editing in my work, and so frequently
                  > have need to select the "innerHTML" of an pair of tags. I have installed
                  > matchit.vim(1) and set the following in my .vimrc:
                  >
                  > let b:match_words='<\([\:0-9A-Za-z_-]\+\)[^>]*>:<\/\1[^>]*>,<%:%>'
                  >
                  > That match_words string works nearly all of the time for HTML, XML, and
                  > so forth, but occasionally fails if the capitalization of the tags does
                  > not match -- it'll match forward, but not backwards.
                  >
                  > Then, I set the following mapping (I use a Mac, so I chose option-A
                  > because it is similar to command-A, which is "select all"):
                  >
                  > map å Vk%k
                  >
                  > I put the cursor on the first line of the "innerHTML" I want to select,
                  > then use the mapping, which goes up to the opening tag, uses % to find
                  > the appropriate closing tag, then goes up again to deselect the closing
                  > tag. Voilá -- I've selected the contents of a pair of tags.
                  >
                  > Dave
                  >
                  > (1) http://www.vim.org/scripts/script.php?script_id=39


                  The above mapping (using V = linewise-visual) seems to imply that each HTML
                  tag is always alone on its line. What about

                  some text with <b>bold,</b> <i>italic or <b>both</b></i> on <u>the same line</u>?

                  I guess you would have to adjust characterwise... let's see... what about

                  :map <F5> vF>h%F<lt>?.<CR>of>/.<CR>
                  ?


                  Best regards,
                  Tony.
                  --
                  "I have to convince you, or at least snow you ..."
                  -- Prof. Romas Aleliunas, CS 435

                  --~--~---------~--~----~------------~-------~--~----~
                  You received this message from the "vim_use" maillist.
                  For more information, visit http://www.vim.org/maillist.php
                  -~----------~----~----~----~------~----~------~--~---
                • Jürgen Krämer
                  Hi, ... I m not sure if I have understood the interaction between b:match_words, matchit.txt, and your mapping correctly but wouldn t vit be a much simplet
                  Message 8 of 12 , Sep 2, 2007
                  • 0 Attachment
                    Hi,

                    Dave Land wrote:
                    >
                    > This discussion also reminded me of a very handy mapping that some
                    > here may enjoy...
                    >
                    > I do lots of HTML (actually, JSP) editing in my work, and so frequently
                    > have need to select the "innerHTML" of an pair of tags. I have installed
                    > matchit.vim(1) and set the following in my .vimrc:
                    >
                    > let b:match_words='<\([\:0-9A-Za-z_-]\+\)[^>]*>:<\/\1[^>]*>,<%:%>'
                    >
                    > That match_words string works nearly all of the time for HTML, XML, and
                    > so forth, but occasionally fails if the capitalization of the tags does
                    > not match -- it'll match forward, but not backwards.
                    >
                    > Then, I set the following mapping (I use a Mac, so I chose option-A
                    > because it is similar to command-A, which is "select all"):
                    >
                    > map å Vk%k
                    >
                    > I put the cursor on the first line of the "innerHTML" I want to select,
                    > then use the mapping, which goes up to the opening tag, uses % to find
                    > the appropriate closing tag, then goes up again to deselect the closing
                    > tag. Voilá -- I've selected the contents of a pair of tags.

                    I'm not sure if I have understood the interaction between b:match_words,
                    matchit.txt, and your mapping correctly but wouldn't

                    vit

                    be a much simplet approach to visually select the text between a tag and
                    its matching end tag? There's also

                    vat

                    to select a text and its surrounding tags.

                    Regards,
                    Jürgen

                    --
                    Sometimes I think the surest sign that intelligent life exists elsewhere
                    in the universe is that none of it has tried to contact us. (Calvin)

                    --~--~---------~--~----~------------~-------~--~----~
                    You received this message from the "vim_use" maillist.
                    For more information, visit http://www.vim.org/maillist.php
                    -~----------~----~----~----~------~----~------~--~---
                  • Tony Mechelynck
                    ... Well, it would! Thanks for pointing out a text object I didn t know about. Best regards, Tony. -- We gave you an atomic bomb, what do you want, mermaids?
                    Message 9 of 12 , Sep 2, 2007
                    • 0 Attachment
                      Jürgen Krämer wrote:
                      >
                      > Hi,
                      >
                      > Dave Land wrote:
                      >> This discussion also reminded me of a very handy mapping that some
                      >> here may enjoy...
                      >>
                      >> I do lots of HTML (actually, JSP) editing in my work, and so frequently
                      >> have need to select the "innerHTML" of an pair of tags. I have installed
                      >> matchit.vim(1) and set the following in my .vimrc:
                      >>
                      >> let b:match_words='<\([\:0-9A-Za-z_-]\+\)[^>]*>:<\/\1[^>]*>,<%:%>'
                      >>
                      >> That match_words string works nearly all of the time for HTML, XML, and
                      >> so forth, but occasionally fails if the capitalization of the tags does
                      >> not match -- it'll match forward, but not backwards.
                      >>
                      >> Then, I set the following mapping (I use a Mac, so I chose option-A
                      >> because it is similar to command-A, which is "select all"):
                      >>
                      >> map å Vk%k
                      >>
                      >> I put the cursor on the first line of the "innerHTML" I want to select,
                      >> then use the mapping, which goes up to the opening tag, uses % to find
                      >> the appropriate closing tag, then goes up again to deselect the closing
                      >> tag. Voilá -- I've selected the contents of a pair of tags.
                      >
                      > I'm not sure if I have understood the interaction between b:match_words,
                      > matchit.txt, and your mapping correctly but wouldn't
                      >
                      > vit
                      >
                      > be a much simplet approach to visually select the text between a tag and
                      > its matching end tag? There's also
                      >
                      > vat
                      >
                      > to select a text and its surrounding tags.
                      >
                      > Regards,
                      > Jürgen
                      >

                      Well, it would! Thanks for pointing out a text object I didn't know about.

                      Best regards,
                      Tony.
                      --
                      We gave you an atomic bomb, what do you want, mermaids?
                      -- I. I. Rabi to the Atomic Energy Commission

                      --~--~---------~--~----~------------~-------~--~----~
                      You received this message from the "vim_use" maillist.
                      For more information, visit http://www.vim.org/maillist.php
                      -~----------~----~----~----~------~----~------~--~---
                    • Dave Land
                      ... It certainly does! I had no idea. I m glad to know about that text object! Unfortunately, Vit and Vat don t work as I would have expected: upon typing the
                      Message 10 of 12 , Sep 2, 2007
                      • 0 Attachment
                        On Sep 2, 2007, at 3:13 AM, Jürgen Krämer wrote:

                        > I'm not sure if I have understood the interaction between
                        > b:match_words,
                        > matchit.txt, and your mapping correctly but wouldn't
                        >
                        > vit
                        >
                        > be a much simplet approach to visually select the text between a
                        > tag and
                        > its matching end tag? There's also
                        >
                        > vat
                        >
                        > to select a text and its surrounding tags.

                        It certainly does! I had no idea.

                        I'm glad to know about that text object!

                        Unfortunately, Vit and Vat don't work as I would have expected: upon
                        typing the final 't', the selection changes from line-oriented ('V')
                        to character-oriented (as though I'd typed 'v' to start).

                        But I will be using vit and vat to select text between tags when I
                        don't need full-line selections.

                        Dave


                        --~--~---------~--~----~------------~-------~--~----~
                        You received this message from the "vim_use" maillist.
                        For more information, visit http://www.vim.org/maillist.php
                        -~----------~----~----~----~------~----~------~--~---
                      • Tony Mechelynck
                        ... After an operator (but not v V Ctrl-V) and before the motion or object, you can use v V or Ctrl-V to force te operator to act characterwise, blockwise or
                        Message 11 of 12 , Sep 2, 2007
                        • 0 Attachment
                          Dave Land wrote:
                          > On Sep 2, 2007, at 3:13 AM, Jürgen Krämer wrote:
                          >
                          >> I'm not sure if I have understood the interaction between
                          >> b:match_words,
                          >> matchit.txt, and your mapping correctly but wouldn't
                          >>
                          >> vit
                          >>
                          >> be a much simplet approach to visually select the text between a
                          >> tag and
                          >> its matching end tag? There's also
                          >>
                          >> vat
                          >>
                          >> to select a text and its surrounding tags.
                          >
                          > It certainly does! I had no idea.
                          >
                          > I'm glad to know about that text object!
                          >
                          > Unfortunately, Vit and Vat don't work as I would have expected: upon
                          > typing the final 't', the selection changes from line-oriented ('V')
                          > to character-oriented (as though I'd typed 'v' to start).
                          >
                          > But I will be using vit and vat to select text between tags when I
                          > don't need full-line selections.
                          >
                          > Dave

                          After an operator (but not v V Ctrl-V) and before the motion or object, you
                          can use v V or Ctrl-V to force te operator to act characterwise, blockwise or
                          linewise, respectively: e.g.:

                          dVit

                          delete inside the tag, and extend the delete to act on whole lines.


                          Best regards,
                          Tony.
                          --
                          The reader this message encounters not failing to understand is
                          cursed.

                          --~--~---------~--~----~------------~-------~--~----~
                          You received this message from the "vim_use" maillist.
                          For more information, visit http://www.vim.org/maillist.php
                          -~----------~----~----~----~------~----~------~--~---
                        • Jürgen Krämer
                          Hi, ... while in any visual selection mode you can use , , or to change to a different one. So just use VitV or vitV to select complete lines.
                          Message 12 of 12 , Sep 2, 2007
                          • 0 Attachment
                            Hi,

                            Dave Land wrote:
                            >
                            > I'm glad to know about that text object!
                            >
                            > Unfortunately, Vit and Vat don't work as I would have expected: upon
                            > typing the final 't', the selection changes from line-oriented ('V')
                            > to character-oriented (as though I'd typed 'v' to start).

                            while in any visual selection mode you can use <V>, <v>, or <C-V> to
                            change to a different one. So just use

                            VitV

                            or

                            vitV

                            to select complete lines.

                            Regards,
                            Jürgen

                            --
                            Sometimes I think the surest sign that intelligent life exists elsewhere
                            in the universe is that none of it has tried to contact us. (Calvin)

                            --~--~---------~--~----~------------~-------~--~----~
                            You received this message from the "vim_use" maillist.
                            For more information, visit http://www.vim.org/maillist.php
                            -~----------~----~----~----~------~----~------~--~---
                          Your message has been successfully submitted and would be delivered to recipients shortly.