You can try checking whether a \verbatiminput follows and, in this case, remove the skips that are inserted (twice \topsep):
\documentclass{article}
\usepackage{verbatim}
\makeatletter
\def\verbatim@input#1#2{%
\IfFileExists {#2}{\@verbatim #1\relax
\verbatim@readfile{\@filef@und}\endtrivlist\endgroup\@doendpe}%
{\typeout {No file #2.}\endgroup}%
%% Added code
\@ifnextchar\verbatiminput{\vspace{-2\topskip}}{}%
}
\makeatother
\begin{document}
\verbatiminput{beer}
\verbatiminput{beer}
This is no beer.
\verbatiminput{beer}
This is no beer.
\end{document}
Here is beer.tex:
\let~\catcode~`x13~`q~`x~`z~`q~`H~`q~`B~`H~`j0~`jA009
jlet~jlet~Hjpar ~Bjmscount~~jdef~x{q bottlez of beer}
~jw{x on the wall}~jt{jadvanceAB-1ATake one down Aand
pass it around,H}B99~ji{jifnumB}~q{ji=0Nojelsejnumber
Bjfi}~z{ji>1sjfiA }jloop jifnumB>0 jw, x,Hjtjw.jvskip
8ptplus1ptjrepeat Time to buy some more beerjdotsjend
Perhaps, a better solution is to use a different command, let's call it \multiverbatiminput that accepts a list of file names:
\documentclass{article}
\usepackage{verbatim}
\makeatletter
\def\multiverbatiminput{\begingroup
\@ifstar{\multiverbatim@input\relax}%
{\multiverbatim@input{\frenchspacing\@vobeyspaces}}}
\def\multiverbatim@input#1#2{%
\@verbatim #1\relax
\@for\next:=#2\do{%
\IfFileExists{\next}{\verbatim@readfile{\@filef@und}}
{\typeout {No file \next.}}}%
\endtrivlist\endgroup\@doendpe}
\makeatother
\begin{document}
This is beer
\multiverbatiminput{beer,beer}
Also this is
\multiverbatiminput{beer}
This is no beer.
\end{document}
\unskipworks in internal vertical mode. So maybe putting stuff into a\vbox, unskipping to your heart's content, and then\unvboxing would be an alternative? – Stephan Lehmke Jun 11 '12 at 13:35\vskip-\lastskip. LaTeX offers a command\removelastskipto that effect. – Stephan Lehmke Jun 11 '12 at 13:36