This has nothing to do with Vim
, you cannot embed a single quote inside a pair of other single quotes. The shell parses the command line arguments before passing them to the invoked command and it just cannot deal with the inner single quote in the way you have defined.
The literal single quote inside need to be preserved before passing to the command. So use double quote and escape the inner quote
vim -c "%s/init=6\'b000000;/init=6\'b110111;/g | write | quit" file
or use the single quote, but include a multi-level double quote inside
vim -c '%s/init=6'"\'"'b000000;/init=6'"\'"'b110111;/g | write | quit' file