This is because the terminal is, by default, line buffered. A read from the terminal will not return until an entire line has been read. This is to allow things like backspace to work with programs that do not use a specialized terminal handling library (e.g. ncurses, readline). You can disable this buffering by running the command
stty -icanon
and then run spim and the program will echo the characters as they are typed. When you're done you should re-enable buffered input with
stty icanon
as the unbuffered mode might cause problems with other programs.