[comp.bugs.sys5] bug in vi with :ab

brant@linc.cis.upenn.edu (Brant Cheikes) (07/17/88)

Problem: Abbreviations are expanded at all levels of vi.
This has been reproduced in both System V vi and BSD vi
(SVR2 and 4.3BSD respectively).

Reproduce:  Run vi, and set an abbreviation, say :ab foo FooBaz.
Now insert some text, anytime you type "foo", it will be replaced
by "FooBaz".  This is fine.  However, you can no longer ever search
for the string "foo", nor edit a file called "foo"--in all cases,
"foo" is expanded first to FooBaz.

SO, is this a bug?  Is there some way to search for abbreviation
strings?  If a bug, is there a fix?  It seems to me that abbreviations
should ONLY be expanded while in input mode.
--
Brant Cheikes
Department of Computer and Information Science
ARPA: brant@linc.cis.upenn.edu, UUCP: {bpa,drexel}!manta!brant

levy@ttrdc.UUCP (Daniel R. Levy) (07/18/88)

In article <5473@super.upenn.edu>, brant@linc.cis.upenn.edu (Brant Cheikes) writes:
# Problem: Abbreviations are expanded at all levels of vi.
# This has been reproduced in both System V vi and BSD vi
# (SVR2 and 4.3BSD respectively).
# Reproduce:  Run vi, and set an abbreviation, say :ab foo FooBaz.
# Now insert some text, anytime you type "foo", it will be replaced
# by "FooBaz".  This is fine.  However, you can no longer ever search
# for the string "foo", nor edit a file called "foo"--in all cases,
# "foo" is expanded first to FooBaz.
# SO, is this a bug?  Is there some way to search for abbreviation
# strings?  If a bug, is there a fix?  It seems to me that abbreviations
# should ONLY be expanded while in input mode.

"Bug" is in the eye of the beholder, I guess, but yes there is a way to do
what you want.  Hide one of the characters of the abbreviation (except the
first if it is a multi-character abbreviation) with a back-slash, e.g. even
if you have done ":ab foo FooBaz", /f\oo/<RETURN> searches for "foo" and
:vi f\oo<RETURN> edits file "foo" etc.
-- 
|------------Dan Levy------------|  THE OPINIONS EXPRESSED HEREIN ARE MINE ONLY
|    AT&T  Data Systems Group    |  AND ARE NOT TO BE IMPUTED TO AT&T.
|        Skokie, Illinois        | 
|-----Path:  att!ttbcad!levy-----|

maart@cs.vu.nl (Maarten Litmaath) (07/20/88)

In article <5473@super.upenn.edu> brant@linc.cis.upenn.edu (Brant Cheikes) writes:
\Problem: Abbreviations are expanded at all levels of vi.
\This has been reproduced in both System V vi and BSD vi
\(SVR2 and 4.3BSD respectively).
\
\Reproduce:  Run vi, and set an abbreviation, say :ab foo FooBaz.
\Now insert some text, anytime you type "foo", it will be replaced
\by "FooBaz".  This is fine.  However, you can no longer ever search
\for the string "foo", nor edit a file called "foo"--in all cases,
\"foo" is expanded first to FooBaz.
\
\SO, is this a bug?  Is there some way to search for abbreviation
\strings?  If a bug, is there a fix?  It seems to me that abbreviations
\should ONLY be expanded while in input mode.

This is a bug indeed.
The same goes for 'map!'.
There are work-arounds however:

	/foo^V.

	and

	/foo^V$

The first will find any occurrence of 'foo' not followed by \n,
the second will find foo at EOL.
The ^V is needed to escape the next 'breakpoint' char.
Edit next file:

	:n foo^V ^J
-- 
I'd rather live in Russia             |Maarten Litmaath @ Free U Amsterdam:
              than in South-Africa... |maart@cs.vu.nl, mcvax!botter!ark!maart

ecl@mtgzy.att.com (Evelyn C. Leeper) (07/20/88)

In article <5473@super.upenn.edu> brant@linc.cis.upenn.edu (Brant Cheikes) writes:
> Problem: Abbreviations are expanded at all levels of vi.  This has been
> reproduced in both System V vi and BSD vi (SVR2 and 4.3BSD respectively).
> 
> Reproduce:  Run vi, and set an abbreviation, say :ab foo FooBaz.  Now insert
> some text, anytime you type "foo", it will be replaced by "FooBaz".  This is
> fine.  However, you can no longer ever search for the string "foo", nor edit a
> file called "foo"--in all cases, "foo" is expanded first to FooBaz.

> SO, is this a bug?  Is there some way to search for abbreviation strings?  If
> a bug, is there a fix?  It seems to me that abbreviations should ONLY be
> expanded while in input mode.

Whether or not it's a bug is a philsophical question.  How to search for the
string "foo" is with "/f.*oo".

					Evelyn C. Leeper
					201-957-2070
				UUCP:	att!mtgzy!ecl or ecl@mtgzy.att.com
				ARPA:	ecl%mtgzy@att.arpa

andy@mssx.UUCP (Andreas Pleschutznig) (07/22/88)

In article brant@linc.cis.upenn.edu (Brant Cheikes) writes:

> Problem: Abbreviations are expanded at all levels of vi.
> This has been reproduced in both System V vi and BSD vi
> (SVR2 and 4.3BSD respectively).
> 
> Reproduce:  Run vi, and set an abbreviation, say :ab foo FooBaz.
> Now insert some text, anytime you type "foo", it will be replaced
> by "FooBaz".  This is fine.  However, you can no longer ever search
> for the string "foo", nor edit a file called "foo"--in all cases,
> "foo" is expanded first to FooBaz.
> 
> SO, is this a bug?  Is there some way to search for abbreviation
> strings?  If a bug, is there a fix?  It seems to me that abbreviations
> should ONLY be expanded while in input mode.
> --

Well, I don't think this is really a bug in vi, because if you read the
description of your system carefully, you will notice that there are 
certain char's like '\' to take the special meaning off. Just try the
following

	vi test
	:ab x foo
	x
	x
	x

You will notice, that the 'x' is translated to 'foo'. Now go up and
do 'rx' at a pace you wish to -> Hmmm... The 'x' seems to be in the file
without translation !!!. In the same way, you may edit then a file named
'x' by doing a line like ':e! \x', where the '\' takes off the special meaning of 'x'.

Hope that helps.
andy