vim-devicons 0,2,1,0,1,0,5

:symbols: Adds file type glyphs/icons to popular Vim plugins: NERDTree, vim-airline, Powerline, Unite, vim-startify and more

VimDevIcons - Add Icons to Your Plugins


GitHub version Join the chat at CodeClimate Issue Count Code of Conduct PRs Welcome

VimDevIcons adds filetype glyphs (icons) to other plugins such as NERDTree, vim-airline, CtrlP, powerline, Denite, unite, lightline.vim, vim-startify, vimfiler, and flagship.

vim-devicons overall screenshot


VimDevIcons integrates with these plugins and more:

NERDTree | vim-airline | CtrlP | powerline | Denite | unite | lightline.vim | vim-startify | vimfiler | flagship

Quick Links

Screenshots API Fonts ➶ Patcher ➶
screenshots api patcher-logo-small patcher-logo-small

Table of Contents

TL;DR Installation







FAQ / Troubleshooting


Quick Installation (TL;DR)

  1. Download and install a patched Nerd Font (or patch your own) (» More details... «)

  2. Install the plugin per your usual method (» More details... «)

  3. Configure Vim (» More details... «)

    • a. vim: Set your terminal emulator font
    • b. gvim: Set guifont in your vimrc


Step 1 Nerd Font

Get a Nerd Font! or patch your own. Without this, things break

Step 2 VimDevIcons Plugin

Choose your favorite plugin manager


  • git clone ~/.vim/bundle/vim-devicons


  • Add to vimrc:

      NeoBundle 'ryanoasis/vim-devicons'
  • And install it:

      :so ~/.vimrc


  • Add to vimrc:

       Plugin 'ryanoasis/vim-devicons'
  • And install it:

       :so ~/.vimrc


  • copy all of the files into your ~/.vim directory

Step 3 Configure Vim

Add the following in your .vimrc or .gvimrc:

Set VimDevIcons to load after these plugins!

NERDTree | vim-airline | CtrlP | powerline | Denite | unite | lightline.vim | vim-startify | vimfiler | flagship

Set encoding to UTF-8 to show glyphs
  set encoding=utf8
Set Vim font to a Nerd Font


 set guifont=<FONT_NAME> <FONT_SIZE>
set guifont=Droid\ Sans\ Mono\ for\ Powerline\ Plus\ Nerd\ File\ Types\ 11

macOS (OS X) and Windows

set guifont=<FONT_NAME>:h<FONT_SIZE>
set guifont=Droid\ Sans\ Mono\ for\ Powerline\ Plus\ Nerd\ File\ Types:h11

Note: if you don't set guifont then you'll have to set your terminal's font, else things break!

If you use vim-airline you need this
  let g:airline_powerline_fonts = 1
vimrc examples

That's it! You're done. ✅


If you installed and setup things correctly you should now see icons in the supported plugins!

Notes on include order:

Lightline Setup and Powerline Setup require some extra setup as shown below:

Lightline Setup

To add the appropriate icon to lightline, call the function WebDevIconsGetFileTypeSymbol() and/or WebDevIconsGetFileFormatSymbol() in your .vimrc. For example, you could set your sections to:

let g:lightline = {
      \ 'component_function': {
      \   'filetype': 'MyFiletype',
      \   'fileformat': 'MyFileformat',
      \ }
      \ }

function! MyFiletype()
  return winwidth(0) > 70 ? (strlen(&filetype) ? &filetype . ' ' . WebDevIconsGetFileTypeSymbol() : 'no ft') : ''

function! MyFileformat()
  return winwidth(0) > 70 ? (&fileformat . ' ' . WebDevIconsGetFileFormatSymbol()) : ''

Powerline Setup

To enable for Powerline some vimrc and powerline configuration changes are needed:

vimrc changes (only required if you don't already have powerline setup for vim):

set rtp+=$HOME/.local/lib/python2.7/site-packages/powerline/bindings/vim/

" Always show statusline
set laststatus=2

" Use 256 colours (Use this setting only if your terminal supports 256 colours)
set t_Co=256

powerline configuration changes:

file type segment

    "function": "vim_devicons.powerline.segments.webdevicons",
    "priority": 10,
    "draw_soft_divider": false,
    "after": "  "

file format segment

    "function": "vim_devicons.powerline.segments.webdevicons_file_format",
    "draw_soft_divider": false,
    "exclude_modes": ["nc"],
    "priority": 90

for full example see sample file

Detailed Features

  • Adds filetype glyphs (icons) to various vim plugins, currently supports:
  • Supports byte order marker (BOM)
  • Customizable and extendable glyphs (icons) settings
    • ability to override defaults and use your own characters or glyphs
  • Supports a wide range of file type extensions by default:
    • styl, sass, scss, htm, html, slim, ejs, css, less, md, rmd, json, js, jsx, rb, php, py, pyc, pyd, pyo, coffee, mustache, hbs, conf, ini, yml, bat, jpg, jpeg, bmp, png, gif, twig, cpp, c++, cxx, cc, cp, c, h, hpp, hxx, hs, lhs, lua, java, sh, bash, zsh, ksh, csh, awk, ps1, fish, diff, db, clj, cljs, edn, scala, go, dart, xul, sln, suo, pl, pm, t, rss, f#, fsscript, fsx, fs, fsi, rs, rlib, d, erl, hrl, vim, ai, psd, psb, ts, jl, pp
  • Supports a few full filename matches, by default:
    •, gruntfile.js,,, gulpfile.js,, dropbox, .ds_store, .gitconfig, .gitignore, .bashrc, .zshrc, .vimrc, .bashprofile, favicon.ico, license, node_modules, react.jsx, procfile
  • Supports a few library pattern matches, by default:
    • jquery, angular, backbone, requirejs, materialize, mootools, Vagrantfile
  • Works with patched fonts, especially Nerd Fonts

Extra Configuration

  • These options can be defined in your vimrc or gvimrc
  • Most options are enabled 1 by default but can be disabled with 0
  • You should not need to configure anything, however, the following options are provided for customizing or changing the defaults:
" loading the plugin 
let g:webdevicons_enable = 1
" adding the flags to NERDTree 
let g:webdevicons_enable_nerdtree = 1
" adding the custom source to unite 
let g:webdevicons_enable_unite = 1
" adding the column to vimfiler 
let g:webdevicons_enable_vimfiler = 1
" adding to vim-airline's tabline 
let g:webdevicons_enable_airline_tabline = 1
" adding to vim-airline's statusline 
let g:webdevicons_enable_airline_statusline = 1
" ctrlp glyphs
let g:webdevicons_enable_ctrlp = 1
" adding to flagship's statusline 
let g:webdevicons_enable_flagship_statusline = 1
" turn on/off file node glyph decorations (not particularly useful)
let g:WebDevIconsUnicodeDecorateFileNodes = 1
" use double-width(1) or single-width(0) glyphs 
" only manipulates padding, has no effect on terminal or set(guifont) font
let g:WebDevIconsUnicodeGlyphDoubleWidth = 1
" whether or not to show the nerdtree brackets around flags 
let g:webdevicons_conceal_nerdtree_brackets = 1
" the amount of space to use after the glyph character (default ' ')
let g:WebDevIconsNerdTreeAfterGlyphPadding = '  '
" Force extra padding in NERDTree so that the filetype icons line up vertically 
let g:WebDevIconsNerdTreeGitPluginForceVAlign = 1

Character Mappings

  • ƛ is used as an example below, substitute for the glyph you actually want to use
" change the default character when no match found
let g:WebDevIconsUnicodeDecorateFileNodesDefaultSymbol = 'ƛ'
" set a byte character marker (BOM) utf-8 symbol when retrieving file encoding
" disabled by default with no value
let g:WebDevIconsUnicodeByteOrderMarkerDefaultSymbol = ''
" enable folder/directory glyph flag (disabled by default with 0)
let g:WebDevIconsUnicodeDecorateFolderNodes = 1
" enable open and close folder/directory glyph flags (disabled by default with 0)
let g:DevIconsEnableFoldersOpenClose = 1
" enable pattern matching glyphs on folder/directory (enabled by default with 1)
let g:DevIconsEnableFolderPatternMatching = 1
" enable file extension pattern matching glyphs on folder/directory (disabled by default with 0)
let g:DevIconsEnableFolderExtensionPatternMatching = 0
" enable custom folder/directory glyph exact matching 
" (enabled by default when g:WebDevIconsUnicodeDecorateFolderNodes is set to 1)
let WebDevIconsUnicodeDecorateFolderNodesExactMatches = 1
" change the default folder/directory glyph/icon
let g:WebDevIconsUnicodeDecorateFolderNodesDefaultSymbol = 'ƛ'
" change the default open folder/directory glyph/icon (default is '')
let g:DevIconsDefaultFolderOpenSymbol = 'ƛ'
" change the default dictionary mappings for file extension matches

let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols = {} " needed
let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['js'] = 'ƛ'
" change the default dictionary mappings for exact file node matches

let g:WebDevIconsUnicodeDecorateFileNodesExactSymbols = {} " needed
let g:WebDevIconsUnicodeDecorateFileNodesExactSymbols['MyReallyCoolFile.okay'] = 'ƛ'
" add or override individual additional filetypes

let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols = {} " needed
let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['myext'] = 'ƛ'
" add or override pattern matches for filetypes
" these take precedence over the file extensions

let g:WebDevIconsUnicodeDecorateFileNodesPatternSymbols = {} " needed
let g:WebDevIconsUnicodeDecorateFileNodesPatternSymbols['.*jquery.*\.js$'] = 'ƛ'

specify OS to decide an icon for unix fileformat (not defined by default)

  • this is useful for avoiding unnecessary system() call. see #135 for further details.
let g:WebDevIconsOS = 'Darwin'

Public Methods

" Returns the current version of the plugin
" Calls webdevicons#softRefresh()
" basically a backwards compatibility convenience
" Does a 'hard' refresh of NERDTree
" resets vim-devicons syntax and closes and reopens NERDTree
" Does a 'soft' refresh of NERDTree
" resets vim-devicons syntax and toggles NERDTree to the same state



" returns the font character that represents the icon
" parameters: a:1 (filename), a:2 (isDirectory)
" both parameters optional
" by default without parameters uses buffer name

" returns the font character that represents
" the file format as an icon (windows, linux, mac)

API Examples

Simple function call
echo WebDevIconsGetFileFormatSymbol()
let entry_format = "'   ['. index .']'. repeat(' ', (3 - strlen(index)))"

if exists('*WebDevIconsGetFileTypeSymbol')  " support for vim-devicons
  let entry_format .= ". WebDevIconsGetFileTypeSymbol(entry_path) .' '.  entry_path"
  let entry_format .= '. entry_path'
Custom status line

Custom vim status line (not relying on vim-airline or lightline):

:set statusline=%f\ %{WebDevIconsGetFileTypeSymbol()}\ %h%w%m%r\ %=%(%l,%c%V\ %Y\ %=\ %P%)




FAQ / Troubleshooting



See Screenshots


Best ways to contribute


Like the project? Please support to ensure continued development going forward:

Source code

Contributions and Pull Requests are welcome.

No real formal process has been setup - just stick to general good conventions for now.


After seeing the awesome theme for Atom (seti-ui) and the awesome plugins work done for NERDTree and vim-airline and wanting something like this for Vim I decided to create my first plugin.

Inspiration and special thanks



Related Repositories



:abcd: Iconic font aggregator, collection, and patcher: 37 patched fonts (71.4k+ ...



vim, zsh, git, homebrew, nvm, nginx, neovim - my whole world ...






dotfile ...



I love Vim, and I also love modifying it to be more convenient and efficient. So ...

Top Contributors

ryanoasis her delphinus lerrua blueyed hoop33 wikimatze mhartington nbicalcarata CharlieMartell SSARCandy alfredbez alpertuna adelarsq johngeorgewright jrobeson theRemix spacepluk svanharmelen shawncplus endenwer gitter-badger trodrigu beanaroo cj tiagofumo


-   v0.8.4 zip tar
-   v0.8.3 zip tar
-   v0.8.2 zip tar
-   v0.8.1 zip tar
-   v0.8.0 zip tar
-   v0.7.1 zip tar
-   v0.7.0 zip tar
-   v0.6.1 zip tar
-   v0.6.0 zip tar
-   v0.5.4 zip tar
-   v0.5.3 zip tar
-   v0.5.2 zip tar
-   v0.5.1 zip tar
-   v0.5.0 zip tar
-   v0.4.4 zip tar
-   v0.4.3 zip tar
-   v0.4.2 zip tar
-   v0.4.1 zip tar
-   v0.4.0 zip tar
-   v0.3.4 zip tar
-   v0.3.3 zip tar
-   v0.3.2 zip tar
-   v0.3.1 zip tar
-   v0.3.0 zip tar
-   v0.2.1 zip tar
-   v0.2.0 zip tar
-   v0.1.4 zip tar
-   v0.1.3 zip tar
-   v0.1.2 zip tar
-   v0.1.1 zip tar