*** | Upcoming deprecation warning | ------------------------------- | Support for the [Original Kien CtrlP Repo][CtrlP] has been dropped since [v0.7.0]( https://github.com/ryanoasis/vim-devicons/milestones/v0.7.0) and only the [active CtrlP fork][ctrlpvim-CtrlP] will be supported | *** [![GitHub version][img-version-badge]][badge-version] [![Join the chat at https://gitter.im/ryanoasis/vim-devicons][img-gitter-badge]][badge-gitter] [![Flattr this git repo][img-flattr-badge]][badge-flattr] *** | **[Screenshots](#screenshots)**| **[API](#api)** | **[Fonts ➶][patched-fonts]** | **[Patcher ➶][nerd-fonts]** | |--------------------------------|-----------------|------------------------------|-----------------------------| | [![screenshots][img-visual-toc-screenshots]](#screenshots) | [![api][img-visual-toc-api]](#api) | [![patcher-logo-small][img-visual-toc-patched-fonts]][patched-fonts] | [![patcher-logo-small][img-visual-toc-fonts-patcher]][nerd-fonts] | ***
Adds filetype glyphs (icons) to other plugins such as NERDTree, vim-airline, CtrlP, powerline, unite, lightline.vim, vim-startify, vimfiler, and flagship.
Table of Contents
Quick Setup (TL;DR)
-
Download and install a patched nerd-font (or patch your own) (» More details... «)
-
Install the plugin per your usual method (» More details... «)
-
Set font (» More details... «)
- a. vim: Set your terminal emulator font
- b. gvim: Set
guifont
in yourvimrc
Installation
This plugin follows the standard runtime path structure, and as such it can be installed with a variety of plugin managers:
Step 1
Pathogen
git clone https://github.com/ryanoasis/vim-devicons ~/.vim/bundle/vim-devicons
NeoBundle
-
Add to vimrc:
NeoBundle 'ryanoasis/vim-devicons'
-
And install it:
:so ~/.vimrc :NeoBundleInstall
Vundle
-
Add to vimrc:
Plugin 'ryanoasis/vim-devicons'
-
And install it:
:so ~/.vimrc :PluginInstall`
Manual
- copy all of the files into your
~/.vim
directory
Step 2
Add the following to your .vimrc or .gvimrc:
Encoding must be set to UTF-8 for the glyphs to show
set encoding=utf8
For Powerline symbols to show in airline the following needs to be set
let g:airline_powerline_fonts = 1
vimrc examples
The ONLY other configuration needed should be setting the font vim uses to a patched font.
Already patched fonts and the font patcher script are provided at: nerd-fonts
It works without configuration ONLY when used with a patched font provided in
the separate repository above. Install the font and add it to your vimrc
or
gvimrc
:
Linux
set guifont=<FONT_NAME> <FONT_SIZE>
set guifont=Droid\ Sans\ Mono\ for\ Powerline\ Plus\ Nerd\ File\ Types\ 11
OS X and Windows
set guifont=<FONT_NAME>:h<FONT_SIZE>
set guifont=Droid\ Sans\ Mono\ for\ Powerline\ Plus\ Nerd\ File\ Types:h11
Usage
After installing the patched font and setting the vim font just open or look at any of the supported plugins you have installed (NERDTree, airline, powerline, unite, lightline.vim, vimfiler, or flagship).
-
NOTE: if you don't have
guifont
set and are not running gvim you will need to set the terminal font. -
NOTE: for support of these plugins: NERDTree, vim-airline, CtrlP, powerline, unite, vimfiler, flagship you must configure vim to load those plugins before vim-devicons loads.
-
NOTE: for better nerdtree-git-plugin support, you should configure vim to load nerdtree-git-plugin before vim-devicons loads.
Screenshots
NERDTree
vim-airline
section | preview |
---|---|
statusline | |
tabline | |
tabline | |
fileformats symbols |
CtrlP
- Supports the original CtrlP plugin and CtrlP active fork
- Currently only MRU file mode supported
powerline
unite
- Currently only supports
file
,file_rec
, andbuffer
lightline.vim
vim-startify
vimfiler
flagship
- NOTE: flagship support is experimental because the API may be changing
nerdtree-git-plugin
- with
g:WebDevIconsNerdTreeGitPluginForceVAlign
on
- with
g:WebDevIconsNerdTreeGitPluginForceVAlign
off
Different patched fonts example
Various Terminal Emulators
- gnome terminal
- Urxvt terminal
Windows
Mac OS X
Thanks @RageZBla
Glyph set test file
Features
- show developer file type glyphs from a font in various vim plugins, currently supports:
- NERDTree
- vim-airline (statusline and tabline)
- lightline.vim (statusline)
- see: lightline setup
- Powerline (statusline)
- see: powerline setup
- Adds a global config map of characters to file extensions (or entire filenames)
- customizable and extendable filetype detections
- ability to override predefined dictionary variable
- if you are unhappy with the default glyph used you can choose your own
- supports a range of file type extensions by default:
styl, scss, htm, html, slim, ejs, css, less, md, 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, hs, lhs, lua, java, sh, 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
- supports full filename matches, by default:
gruntfile.coffee, gruntfile.js, gruntfile.ls, gulpfile.coffee, gulpfile.js, gulpfile.ls, dropbox, .ds_store, .gitconfig, .gitignore, .bashrc, .bashprofile, favicon.ico, license, node_modules, react.jsx, procfile
- supports library pattern matches, by default:
jquery, angular, backbone, requirejs, materialize, mootools
- font patcher (nerd-fonts)
- requires: python2, python-fontforge package
- example usage
./font-patcher unpatched-sample-fonts/Droid\ Sans\ Mono\ for\ Powerline.otf
Extra Configuration
-
by default you should not NEED to configure anything to get the basics working
- NOTE: You NEED to use one of the patched font provided or patch your own (nerd-fonts) unless you want to configure the filetype to glyph mappings yourself for your current font
-
these options can be defined in your
vimrc
orgvimrc
-
the following options are provided however for overriding
-
enable/disable loading the plugin (default 1)
let g:webdevicons_enable = 1
- enable/disable adding the flags to NERDTree (default 1)
let g:webdevicons_enable_nerdtree = 1
- enable/disable adding the custom source to unite (default 1)
let g:webdevicons_enable_unite = 1
- enable/disable adding the column to vimfiler (default 1)
let g:webdevicons_enable_vimfiler = 1
- enable/disable adding to vim-airline's tabline (default 1)
let g:webdevicons_enable_airline_tabline = 1
- enable/disable adding to vim-airline's statusline (default 1)
let g:webdevicons_enable_airline_statusline = 1
- enable/disable ctrlp MRU file mode glyphs (default 1)
let g:webdevicons_enable_ctrlp = 1
- enable/disable adding to flagship's statusline (default 1)
let g:webdevicons_enable_flagship_statusline = 1
- turn on/off file node glyph decorations (not particularly useful)
let g:WebDevIconsUnicodeDecorateFileNodes = 1
- whether or not font is using double-width glyphs (default 1, set to 0 for single character width glyphs)
- note: does not actually switch the font or try to use the correct font, just adds a space to account for a double width glyph, you have to set the correct double width glyph font in your terminal or
guifont
- note: does not actually switch the font or try to use the correct font, just adds a space to account for a double width glyph, you have to set the correct double width glyph font in your terminal or
let g:WebDevIconsUnicodeGlyphDoubleWidth = 1
- whether or not to show the nerdtree brackets around flags (default 1)
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 (when nerdtree-git-plugin is present) (default 1)
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 = 'ƛ'
- 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:WebDevIconsUnicodeDecorateFolderNodeDefaultSymbol = 'ƛ'
- 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'] = 'ƛ'
- specify OS to decide an icon for unix fileformat (not defined by default)
- this is useful for avoiding unnecessary
system()
call. you might see #135 to know logic further.
- this is useful for avoiding unnecessary
let g:WebDevIconsOS = 'Darwin'
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') : ''
endfunction
function! MyFileformat()
return winwidth(0) > 70 ? (&fileformat . ' ' . WebDevIconsGetFileFormatSymbol()) : ''
endfunction
Powerline Setup
- Note this is for the current Powerline not the deprecated vim-powerline
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
API
" 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
WebDevIconsGetFileTypeSymbol(...)
" returns the font character that represents
" the file format as an icon (windows, linux, mac)
WebDevIconsGetFileFormatSymbol()
API Examples
- todo
Todo
- more filetypes to support
- customize filetype icon colors
- more customization options in general
- more specific FAQ and Troubleshooting help
FAQ / Troubleshooting
-
I don't want to use any of the fonts provided, I want to use font ABC
-
try the font patcher: nerd-fonts
-
see font configuration above for more details
-
It isn't working
-
Are you using the patched font provided in the separate repo (nerd-fonts) or are you patching your own?
-
NOTE: if running vim and no font set it will default to the terminal font that is set
-
check what the vim/gvim font is set to, from ex mode:
:set guifont?
-
check if the plugin is loaded (should give '1'), from ex mode:
:echo loaded_webdevicons
-
check if the plugin is enabled (should give '1'), from ex mode:
:echo g:webdevicons_enable
-
check if the plugin is enabled for NERDTree (should give '1'), from ex mode:
- this should NOT need to be set under normal circumstances
:echo g:webdevicons_enable_nerdtree
-
check if you are able to see the characters, from ex mode:
:echo g:WebDevIconsUnicodeDecorateFileNodesDefaultSymbol
-
if all this looks correct you may try this to see if any files show flags
- last resort, see if you can even set the default symbol and have it display anywhere (NERDTree, vim-airline's statusline, vim-airlines's tabline), from ex mode:
:let g:WebDevIconsUnicodeDecorateFileNodesDefaultSymbol='x'
-
-
How did you get color matching based on file type in nerdtree?
-
my current settings are from: preservim/nerdtree#201 (comment)
" NERDTress File highlighting function! NERDTreeHighlightFile(extension, fg, bg, guifg, guibg) exec 'autocmd FileType nerdtree highlight ' . a:extension .' ctermbg='. a:bg .' ctermfg='. a:fg .' guibg='. a:guibg .' guifg='. a:guifg exec 'autocmd FileType nerdtree syn match ' . a:extension .' #^\s\+.*'. a:extension .'$#' endfunction call NERDTreeHighlightFile('jade', 'green', 'none', 'green', '#151515') call NERDTreeHighlightFile('ini', 'yellow', 'none', 'yellow', '#151515') call NERDTreeHighlightFile('md', 'blue', 'none', '#3366FF', '#151515') call NERDTreeHighlightFile('yml', 'yellow', 'none', 'yellow', '#151515') call NERDTreeHighlightFile('config', 'yellow', 'none', 'yellow', '#151515') call NERDTreeHighlightFile('conf', 'yellow', 'none', 'yellow', '#151515') call NERDTreeHighlightFile('json', 'yellow', 'none', 'yellow', '#151515') call NERDTreeHighlightFile('html', 'yellow', 'none', 'yellow', '#151515') call NERDTreeHighlightFile('styl', 'cyan', 'none', 'cyan', '#151515') call NERDTreeHighlightFile('css', 'cyan', 'none', 'cyan', '#151515') call NERDTreeHighlightFile('coffee', 'Red', 'none', 'red', '#151515') call NERDTreeHighlightFile('js', 'Red', 'none', '#ffa500', '#151515') call NERDTreeHighlightFile('php', 'Magenta', 'none', '#ff00ff', '#151515') call NERDTreeHighlightFile('ds_store', 'Gray', 'none', '#686868', '#151515') call NERDTreeHighlightFile('gitconfig', 'Gray', 'none', '#686868', '#151515') call NERDTreeHighlightFile('gitignore', 'Gray', 'none', '#686868', '#151515') call NERDTreeHighlightFile('bashrc', 'Gray', 'none', '#686868', '#151515') call NERDTreeHighlightFile('bashprofile', 'Gray', 'none', '#686868', '#151515')
Note: If the colors still are not highlighting, try invoking such as:
autocmd VimEnter * call NERDTreeHighlightFile('jade', 'green', 'none', 'green', '#151515')
-
-
Issues after re-sourcing
vimrc
-
Try adding this to the bottom of your
vimrc
if exists("g:loaded_webdevicons") call webdevicons#refresh() endif
-
-
Artifacts after or instead of glyphs
- Dots after icons in NERDTree (on GVim), try:
autocmd FileType nerdtree setlocal nolist
Contributing
Best ways to contribute
- Star it on GitHub - if you use it and like it please at least star it :)
- Promote
- Open issues/tickets
- Submit fixes and/or improvements with Pull Requests
Promotion
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.
Rationale
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
- vim-airline
- nerdtree
- nerdtree-git-plugin
- seti-ui
- devicons by Theodore Vorillas
- benatespina development.svg.icons
- Steve Losh
Also thanks to the many contributors:
License
See LICENSE