Tuesday, November 12, 2019

Re: Un-POSIX-like behavior of join command



On Nov 12, 2019, at 2:26 PM, Bram Moolenaar <Bram@moolenaar.net> wrote:


I wrote:

Brennan Vincent wrote:

When joining a line that is followed by an empty line (or one with only 
spaces), POSIX specifies that it should be deleted without the current 
line being affected. See the section "Join" in 
https://pubs.opengroup.org/onlinepubs/9699919799/ .

However, vim appends a space to the current line in this case. For 
example, if line 1 is "foo", and line 2 is blank, after executing :1j 
line 1 will be "foo ", as can be seen by executing the following (`ex` 
is provided by `vi` on my system)

$ echo -e 'foo\n' > test.txt && echo -e '1j\nwq' | ex test.txt && wc -c 
test.txt
5 test.txt

nvi/nex give the POSIX behavior:

$ echo -e 'foo\n' > test.txt && echo -e '1j\nwq' | nex test.txt && wc -c 
test.txt
4 test.txt

Is this a bug, or intentional?

I can't think of a reason why it works this way.  And the trailing space
is useless.  So we should call it a bug.

What should happen if the second line is blank, not empty?

The spec apparently says that blank lines are also not resulting in a
trailing space:

1. Discard leading <space> characters from the line to be joined.
2. If the line to be joined is now empty, delete it, and skip steps 3 through 5.

-- 
hundred-and-one symptoms of being an internet addict:
78. You find yourself dialing IP numbers on the phone.

/// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
\\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

Tony: Thanks for the tip. I have tried with `VIM_POSIX=1 vim -u NONE` and I get the same undocumented un-POSIX-like behavior.

Bram: Thanks for confirming. If we are agreed that this is a bug, is there some Vim bug tracker I should enter it on?

No comments: