As I was told in the comments, the fundamental difference is that
:b1 targets the buffer list and
:rewind targets the argument list.
:help buffer-list is a nice summary:
args list buffer list meaning
:[N]argument [N] :[N]buffer [N] to arg/buf N
:[N]next [file ..] :[N]bnext [N] to Nth next arg/buf
:[N]Next [N] :[N]bNext [N] to Nth previous arg/buf
:[N]previous [N] :[N]bprevious [N] to Nth previous arg/buf
:rewind / :first :brewind / :bfirst to first arg/buf
:last :blast to last arg/buf
:all :ball edit all args/buffers
:unhide edit all loaded buffers
:[N]bmod [N] to Nth modified buf
The argument list are the arguments passed
Vim on startup. It hardly ever changes (
:argadd, etc. can change them though).
vim file1 file2
means the argument list contains file1 and file2.
The buffer list is not static. With
:e file3, it incorporates file3,
:ls shows the three files while
:args shows only file1 and file2.
Resuming the experiment, wipe the 1st buffer with
:bwipe 1. Buffer 1 has been wiped and thus removed from the buffer list. Now,
raises an error "Buffer 1 does not exist",
:brewind goes to the first
buffer in the buffer list, file2,
:rewind brings back file1 in a new buffer,
since the argument list is unchanged and the first argument is file1.