The question 20.5 of the Vim FAQ seems to indicate that vim will receive a single character:
20.5. Why does mapping the <C-...> key not work?
The only Ctrl-printable-key chords which Vim can reliably detect (because they
are defined in the ASCII standard) are the following: >
Ctrl-@ 0x00 NUL
Ctrl-A to Ctrl-Z 0x01 to 0x1A
Ctrl-a to Ctrl-z 0x01 to 0x1A
Ctrl-[ 0x1B ESC
Ctrl-\ 0x1C
Ctrl-] 0x1D
Ctrl-^ 0x1E
Ctrl-_ 0x1F
Ctrl-? 0x7F DEL
But the keyboard input system was subject to several discussion on the vim-dev mailing list:
So you will probably need to read the source code to have a better understanding of this mechanism.
For your second question you could check question 20.4, as any valid normal mode keystroke can be used for mappings:
20.4. I am not able to create a mapping for the <xxx> key. What is wrong?
1) First make sure, the key is passed correctly to Vim. To determine if
this is the case, put Vim in Insert mode and then hit Ctrl-V (or
Ctrl-Q if your Ctrl-V is remapped to the paste operation (e.g. on
Windows if you are using the mswin.vim script file) followed by your
key.
If nothing appears in the buffer (and assuming that you have
'showcmd' on, ^V remains displayed near the bottom right of the Vim
screen), then Vim doesn't get your key correctly and there is nothing
to be done, other than selecting a different key for your mapping or
using GVim, which should recognise the key correctly.
(...)
For more information, read
|map-keys-fails|
|:map-special-keys|
|key-codes|
Edit:
If your purpose is to pass commands to vim from external tools, you might consider avoid understanding the details on how <ctrl-a>
is received by vim, providing the alternative format explained in :help key-codes
(e.g.: <C-a>
standing for <ctrl-a>
), and then using :execute
+ normal
commands, as explained in :help :execute
:
:execute "normal ixxx\<Esc>"
(possibly by inserting such strings on the clipboard and executing it from vim with :@+
or writing to a file and then using :source
on it)
-c
in order to have vim filtering a file.