How to Insert Unicode Characters in Neovim/Vim
Contents
Except for the ASCII characters, it is often not straightforward to insert Unicode characters into Vim/Neovim. Below I will summarize a few ways to enter Unicode characters inside Neovim/Vim.
I assume that you are using UTF-8 encoding (:set encoding=utf-8
), and you are
using a font with proper support for Unicode symbols, e.g., nerd-fonts.
Otherwise, some Unicode characters shown below may not show correctly on your
terminal.
Use Ctrl-V to insert character
The native way to insert a Unicode character is via Ctrl + V. In insert mode, we first press Ctrl + V, and then for Unicode characters whose code points1 are less than:
ffff
(in hex format): pressu
( lower case), followed by its four-digit hex representation.7fffffff
(in hex format): pressU
( upper case), followed by its eight-digit hex representation.
For example, to insert the middle dot symbol (·
), we can press <C-v>u00b7
or <C-v>ub7
followed by ESC. To insert the crying cat emoji (😿
), we can press <C-v>U0001f63f
2 or
<C-v>U1f63f
followed by ESC.
Use special escape sequence notation
We can also use special escape sequence to represent a character. To represent
middle dot in the above section, use \u00b7
or \ub7
. To represent the cry
cat, use \U0001f63f
or \U1f63f
. Backspace is \b
and Escape is \e
.
For more details, see :h string
.
Use plugin unicode.vim
To ease manipulation of Unicode characters, there is also a plugin called unicode.vim.
Unicode.vim provides an enhanced version of the built-in ga
(see :h ga
)
operation. To use it, add the following setting to init.vim
:
nmap ga <Plug>(UnicodeGA)
It also provides several useful commands:
:UnicodeName
: show the Unicode info about character under cursor.:UnicodeSearch
: search a Unicode character. It supports regular expression. For example, to search Unicode character containingCAT
, we can use:UnicodeSearch \<CAT\>
. The bang version (:UnicodeSearch!
) can also insert the chosen character into cursor position.
Insert-mode completion
Unicode.vim also provides insert mode completion for Unicode characters. We can
type some character in the name of Unicode character, and press <C-X><C-Z>
(i.e., Ctrl+X followed by Ctrl+Z).
Alternatively, we can also provide the Unicode code point of a character and
press <C-X><C-Z>
.
For example, to insert middle dot, we can:
type
dot
, and press<C-X><C-Z>
(A completion menu will pop up with candidate character).type
U+00b7
, and press<C-X><C-Z>
.
If you have fzf installed, you can also
activate the fuzzy search feature to search Unicode (see :h unicode-fuzzy-insertion
).
Use digraphs
Vim/Neovim also provides a feature called digraphs (see :h digraphs
). Some
non-printed character or commonly-used Unicode characters can be easily
inserted using this feature. The command :digraphs
will print the pre-defined
digraphs table, like the following:
......
PI ¶ 182 pp ¶ 182 .M · 183 ~. · 183 ', ¸ 184 1S ¹ 185
A' Á 193 A> Â 194 A^ Â 194 A? Ã 195 A~ Ã 195 A: Ä 196
......
In each digraph group, the first two characters are the codes for the actual
character, the middle being the actual character, and the last being the
decimal value of the characters. For example, the codes for middle dot is .M
,
and its decimal number is 183.
To enter a character, press Ctrl-K
in insert mode, followed by its codes. For
example, to insert middle dot using digraphs, press <C-K>.M
. To insert the
copyright symbol (©
), press <C-K>Co
. To insert trademark symbol (™
),
press <C-K>TM
.
Define your own digraphs
We can also define our own digraphs. The syntax is:
:digraphs {char1}{char2} {number}
{number}
is the decimal value for the Unicode character. For example, to define a digraph entry
for the loud crying face emoji (😭
, decimal value 128557), use the following command:
:digraphs lc 128557
Then, in insert mode, pressing <C-K>lc
will insert this emoji.