Michael F. Lamb wrote:

> I've put some spare time into an errorformat string and a filter script
> which I think makes plain-old javac compilation (read: not using JUnit,
> not using Ant) quite a bit nicer than the examples from :help
> errorformat-javac, without being too heavy or complicated. I've tested
> this with only Vim 7.0.122 on Linux, Sun Java 1.6.0, and only minimally
> at that.
> 
> It correctly discovers the column number even if you use tabs in your
> source code, doesn't fill the "error message" variable with extra crud,
> shows the "symbol:" and "location:" lines in the quickfix window, but
> properly skips over them when doing :cnext and :cprevious. Note that
> "symbol:" and "location:" will appear above their related error message
> in the quickfix window.
> 
> Here's the sed script to filter the output from javac. I named it
> 'vim-javac-filter' and placed it in my path.
> 
>       #!/bin/sed -f
>       /\^$/s/\t/\ /g;/:[0-9]\+:/{h;d};/^[ \t]*\^/G;
> 
> In English, that sed script:
>  - Changes tabs to spaces and
>  - Moves the line with the filename, line number, error message to just
>    after the pointer line. That way, the extra gunk between doesn't
>    break vim's notion of a "multi-line message" and also doesn't force
>    us to include that gunk as a "continuation of a multi-line message."
> 
> Here's the corresponding efm:
> 
>       :setlocal errorformat=%Z%f:%l:\ %m,%A%p^,%-G%*[^sl]%.%#
> 
> To make it work using ":make":
> 
>       :setlocal makeprg=javac\ %\ 2>&1\ \\\|\ vim-javac-filter

Assuming this works well, it's only for Unix.  Thus I would add it to
":help errorformat-javac" instead of replacing the existing example.
How about this:

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Here is an alternative from Michael F. Lamb for Unix that filters the errors
first: >
  :setl errorformat=%Z%f:%l:\ %m,%A%p^,%-G%*[^sl]%.%#
  :setl makeprg=javac\ %\ 2>&1\ \\\|\ vim-javac-filter

You need to put the following in "vim-javac-filter" somewhere in your path
(e.g., in ~/bin) and make it executable: >
   #!/bin/sed -f
   /\^$/s/\t/\ /g;/:[0-9]\+:/{h;d};/^[ \t]*\^/G;

In English, that sed script:
- Changes tabs to spaces and
- Moves the line with the filename, line number, error message to just after
  the pointer line. That way, the extra gunk between doesn't break vim's
  notion of a "multi-line message" and also doesn't force us to include that
  gunk as a "continuation of a multi-line message."
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

-- 
DENNIS: Look,  strange women lying on their backs in ponds handing out
        swords ... that's no basis for a system of government.  Supreme
        executive power derives from a mandate from the masses, not from some
        farcical aquatic ceremony.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

Reply via email to