Assuming integer data, then thanks to NEON having specific "compare against zero" instructions, and the bitwise way comparison results work, there's a really cheeky way to do this using just one spare register. In generalised pseudo-assembly:
VCEQ.type mask, data, #0 @ Generate bitmask vector with all bits set in elements
@ corresponding to zero elements in the data
VSUB.type data, data, mask @ Interpret "mask" as a vector of 0s and -1s, with the
@ result of incrementing just the zero elements of "data"
@ (thanks to twos complement underflow)
This trick doesn't work for floating-point data as the bit-patterns for nonzero values are more complicated, and neither does it work if the replacement value is to be anything other than 1 (or -1), so in those cases you would need to construct a separate vector containing the appropriate replacement elements and do a conditional select using the comparison mask as per @Ermlg's answer.