'How do I enter an emoji into a string in Vim?

Couldn't figure this out. Just need to enter 1 emoji into a string and couldn't figure it out. Unicode is not working. Tried diagraph but didn't work either. Is there some trick to this in Vim? thx!



Solution 1:[1]

You do not need to install a plugin for this. All you need to do is enter the unicode value of the emoji. You can do that in insert mode with <C-v>. From :h i_ctrl-v_digit:

                        *i_CTRL-V_digit*
With CTRL-V the decimal, octal or hexadecimal value of a character can be
entered directly.  This way you can enter any character, except a line break
(<NL>, value 10).  There are five ways to enter the character value:

first char  mode         max nr of chars   max value ~
(none)      decimal        3        255
o or O      octal          3        377      (255)
x or X      hexadecimal    2        ff       (255)
u           hexadecimal    4        ffff     (65535)
U           hexadecimal    8        7fffffff (2147483647)

For example, if you want to enter this smiley-face, which has a unicode value of U+1F60A, you could simply type:

<C-v>U1F60A<esc>

or if you don't want to hit <esc>,

<C-v>U0001F60A

Just so you know, there's a good chance that it will not render properly in vim, depending on your font. If you are using gvim, you can change :se guifont=*, or in regular vim, changing your consoles font to make it render (assuming you pick a font that can render this particular emoji)

Solution 2:[2]

Another approach is to use abbreviations.

I added a few in my .vimrc file and now I just type :pushpin: for ?, :bulb: for ?, :bomb: for ?, etc...

" Emoji shortcuts
ab :white_check_mark: ?
ab :warning: ?
ab :bulb: ?
ab :pushpin: ?
ab :bomb: ?
ab :pill: ?
ab :construction: ?
ab :pencil: ?
ab :point_right: ?
ab :book: ?
ab :link: ?
ab :wrench: ?
ab :info: ?
ab :telephone: ?
ab :email: ?
ab :computer: ?

There are a lot more of them on emojicopy.com or similar sites. I just picked a few I already used before.

Solution 3:[3]

While it is possible to <c-v>U1f60A<esc>, it's not practical if you're responding to email / entering a comment in a web form. I'm not going to memorize unicode emoji tables ??? for quick "Thanks ?" comment.

Few other options for such use cases:

  1. Type your usual smileys like :) and have a plugin replace it with the unicode equivalent ?. The plugin emoji-ab does this for you.

  2. Type codes like :boom:. Many markdown parsers will convert it to ? for you. But if you're not using such a parser, emoji-ab will also convert it for you.

  3. Use something like gucharmap (or one of the many online Unicode pickers) to copy and paste unicode characters into vim.

Solution 4:[4]

Another way to access these emojies in many contexts including Vim is to use the character map dialog window:

  • On Mac, press Ctrl+Command+Space and select the character.
  • On Windows, press Windows+R and type the charmap.

Charmap selector image

Solution 5:[5]

You can use emoji-fzf pip package

First install fzf

sudo apt install fzf 

then intall emoji-fzf

pip install emoji-fzf

now make sure you can run emoji-fzf

emoji-fzf --help

if you get "comand not found" error please see pip installs packages successfully, but executables not found from command line

now add emoji-fzf to your .vimrc

" Use emoji-fzf and fzf to fuzzy-search for emoji, and insert the result
function! InsertEmoji(emoji)
    let @a = system('cut -d " " -f 1 | emoji-fzf get', a:emoji)
    normal! "agP
endfunction

command! -bang Emoj
  \ call fzf#run({
      \ 'source': 'emoji-fzf preview',
      \ 'options': '--preview ''emoji-fzf get --name {1}''',
      \ 'sink': function('InsertEmoji')
      \ })
" Ctrl-e in normal and insert mode will open the emoji picker.
" Unfortunately doesn't bring you back to insert mode ?
map <C-e> :Emoj<CR>
imap <C-e> <C-o><C-e>

restart your vim and press ctrl + e and search for your favourite emoji and press enter

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 DJMcMayhem
Solution 2
Solution 3
Solution 4 ib.
Solution 5