Insert Single Character in Vim?
In Vim (7.2), there is a normal mode command r
to replace a single character with another. For example, typing rX
will replace the one character under the cursor with X
and then return you to normal mode.
Is there a normal-mode command to insert a single character and then return to normal mode?
Solution 1:
MelBurslan is correct that this feature does not natively exist, but creating a user-defined command is not really the way to go about creating it. I tinkered for a few minutes and came up with this:
:nmap <silent> ,s "=nr2char(getchar())<cr>P
Which uses some Vim trickery involving "putting" text from a register, in this case the "expression" register. The expression being plugged into the register is "nr2char(getchar())
" which will return a single character string.
The reason I built the mapping this way is that getting user input "midway through" a mapping is tricky and can behave unpredictably; even this mapping will drop the cursor down to the status area while waiting for the user to type a character.
Solution 2:
Thanks to Johnny for giving us this terrific answer in the comments below:
":nmap <C-i> i_<Esc>r"
That maps Control + i to insert a single character, and it does it very concisely.
In your vimrc file, this will look like:
nnoremap <C-i> i_<Esc>r
I changed my mapping to use space, and you can change yours to your preferred key(s):
nnoremap <Space> i_<Esc>r
Solution 3:
As far as I know, there is no such function in any widely distributed incarnation of vi editor but, vim has a facility to create custom commands. It has previously been discussed here: in this thread
You might be able to create your custom command doing what you wish to do.
Solution 4:
A simple way to do this is using the Cut x and Put p commands. Say that *
is the character you want to insert. Insert it using i * Esc. Then hit x. That will cut the character. Now, you can hit p to put the single character. If you need to insert that character 300 times, you can type: 300p
.