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

Re: jumping to errors in non-existent files

Expand Messages
  • Benjamin R. Haskell
    ... So, that addresses one aspect of the problem. But I want to ask: is it ever useful to have quickfix jump to an error in a nonexistent file in the first
    Message 1 of 6 , Oct 1, 2010
      On Fri, 1 Oct 2010, Karthick Gururaj wrote:

      > On Fri, Oct 1, 2010 at 7:30 PM, Jeff Perry wrote:
      >>
      >> When I run my program from within vim
      >>
      >>      :./xyz
      >>
      >> and the program errors out with a runtime error, e.g.:
      >>
      >>     myprog: myprog.cpp:123: assertion 'x==1' failed
      >>
      >> vim tries to interpret the the output and jump to the offending line
      >> number.
      >>
      >> The problem is that in the example above it incorrectly interprets
      >> the filename as "myprog: myprog.cpp", so it opens a file with that
      >> name, which doesn't exist, and then tries to jump to line 123 in that
      >> non-existent file.
      >>
      >> My question is:  Where in vim is this behaviour specified and how can
      >> I tweak it to do the right thing?
      >
      > See :help errorformat
      >
      > Try,
      > :set efm=%*[^\ ]%f:%l:%m
      >

      So, that addresses one aspect of the problem. But I want to ask: is
      it ever useful to have quickfix jump to an error in a nonexistent file
      in the first place?

      And if there's not a good use case for it, can this be changed at a
      lower level? If quickfix is told to open a file that doesn't exist,
      throw an error, instead of trying to open it.

      --
      Best,
      Ben

      --
      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
    • Étienne Faure
      ... You also have to get the output of xyz into a file: ./xyz 2 &1 | tee xyz.err And for the rest see: man tee ... Tinou -- You received this message from the
      Message 2 of 6 , Oct 1, 2010
        On Fri, Oct 1, 2010 at 16:48, Benjamin R. Haskell <vim@...> wrote:
        >
        > On Fri, 1 Oct 2010, Karthick Gururaj wrote:
        >
        >> On Fri, Oct 1, 2010 at 7:30 PM, Jeff Perry wrote:
        >>>
        >>> When I run my program from within vim
        >>>
        >>>      :./xyz
        >>>
        >>> and the program errors out with a runtime error, e.g.:
        >>>
        >>>     myprog: myprog.cpp:123: assertion 'x==1' failed
        >>>
        >>> vim tries to interpret the the output and jump to the offending line number.
        >>>
        >>> The problem is that in the example above it incorrectly interprets the filename as "myprog: myprog.cpp", so it opens a file with that name, which doesn't exist, and then tries to jump to line 123 in that non-existent file.
        >>>
        >>> My question is:  Where in vim is this behaviour specified and how can I tweak it to do the right thing?
        >>
        >> See :help errorformat
        >>
        >> Try,
        >> :set efm=%*[^\ ]%f:%l:%m
        >>

        You also have to get the output of xyz into a file:
        ./xyz 2>&1 | tee xyz.err

        And for the rest see:
        man tee
        :help errorfile

        Tinou

        --
        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
      • Benjamin R. Haskell
        ... (and run via :make) It handles the redirects you suggest ( 2 &1 | tee ) via the shellpipe option. -- Best, Ben [1] depends on what kind of program it is
        Message 3 of 6 , Oct 1, 2010
          On Fri, 1 Oct 2010, Étienne Faure wrote:

          > On Fri, Oct 1, 2010 at 16:48, Benjamin R. Haskell wrote:
          >>
          >> On Fri, 1 Oct 2010, Karthick Gururaj wrote:
          >>
          >>> On Fri, Oct 1, 2010 at 7:30 PM, Jeff Perry wrote:
          >>>>
          >>>> When I run my program from within vim
          >>>>
          >>>>      :./xyz
          >>>>
          >>>> and the program errors out with a runtime error, e.g.:
          >>>>
          >>>>     myprog: myprog.cpp:123: assertion 'x==1' failed
          >>>>
          >>>> vim tries to interpret the the output and jump to the offending line number.
          >>>>
          >>>> The problem is that in the example above it incorrectly interprets
          >>>> the filename as "myprog: myprog.cpp", so it opens a file with that
          >>>> name, which doesn't exist, and then tries to jump to line 123 in
          >>>> that non-existent file.
          >>>>
          >>>> My question is:  Where in vim is this behaviour specified and how
          >>>> can I tweak it to do the right thing?
          >>>
          >>> See :help errorformat
          >>>
          >>> Try,
          >>> :set efm=%*[^\ ]%f:%l:%m
          >>>
          >
          > You also have to get the output of xyz into a file:
          > ./xyz 2>&1 | tee xyz.err

          It might be[1] easier to:

          :set makeprg=./xyz

          (and run via :make)

          It handles the redirects you suggest ('2>&1 | tee') via the 'shellpipe'
          option.

          --
          Best,
          Ben

          [1] depends on what kind of program it is -- if it's compiled, you might
          not want to coöpt the 'make' mechanism.

          --
          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
        • jeffsp
          ... Thanks for all the helpful comments. Actually, I had simplified the problem: I am running :make and my Makefile calls ./xyz, so the redirection stuff is
          Message 4 of 6 , Oct 7, 2010
            On Oct 1, 4:24 pm, "Benjamin R. Haskell" <v...@...> wrote:
            > On Fri, 1 Oct 2010, Étienne Faure wrote:
            > > On Fri, Oct 1, 2010 at 16:48, Benjamin R. Haskell wrote:
            >
            > >> On Fri, 1 Oct 2010, Karthick Gururaj wrote:
            >
            > >>> On Fri, Oct 1, 2010 at 7:30 PM, Jeff Perry wrote:
            >
            > >>>> When I run my program from within vim
            >
            > >>>>      :./xyz
            >
            > >>>> and the program errors out with a runtime error, e.g.:
            >
            > >>>>     myprog: myprog.cpp:123: assertion 'x==1' failed
            >
            > >>>> vim tries to interpret the the output and jump to the offending line number.
            >
            > >>>> The problem is that in the example above it incorrectly interprets
            > >>>> the filename as "myprog: myprog.cpp", so it opens a file with that
            > >>>> name, which doesn't exist, and then tries to jump to line 123 in
            > >>>> that non-existent file.
            >
            > >>>> My question is:  Where in vim is this behaviour specified and how
            > >>>> can I tweak it to do the right thing?
            >
            > >>> See :help errorformat
            >
            > >>> Try,
            > >>> :set efm=%*[^\ ]%f:%l:%m
            >
            > > You also have to get the output of xyz into a file:
            > > ./xyz 2>&1 | tee xyz.err
            >
            > It might be[1] easier to:
            >
            > :set makeprg=./xyz
            >
            > (and run via :make)
            >
            > It handles the redirects you suggest ('2>&1 | tee') via the 'shellpipe'
            > option.
            >
            > --
            > Best,
            > Ben
            >
            > [1] depends on what kind of program it is -- if it's compiled, you might
            > not want to coöpt the 'make' mechanism.

            Thanks for all the helpful comments. Actually, I had simplified the
            problem: I am running :make and my Makefile calls ./xyz, so the
            redirection stuff is taken care of.

            My solution was to use Karthick Gururaj's suggestion, slightly
            modified:

            :set efm^=%*[^\ ]:%f:%l:%m

            This, of course, won't work if you put spaces in your filenames.

            --
            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.