aboutsummaryrefslogtreecommitdiff
path: root/dotfiles/.local/share/nvim/site/autoload/airline/extensions
diff options
context:
space:
mode:
authorYaroslav <contact@yaroslavps.com>2020-03-31 17:52:49 +0300
committerYaroslav <contact@yaroslavps.com>2020-03-31 17:52:49 +0300
commit7217c7749e5403c9c7856c1d12c7986eb9c3b460 (patch)
treed60a112d9119a51af1cf5f590c5efad81751edf6 /dotfiles/.local/share/nvim/site/autoload/airline/extensions
parent9a3aa7b20a67c1b7991da1da9508ad5f78f76352 (diff)
downloadvimrice-7217c7749e5403c9c7856c1d12c7986eb9c3b460.tar.gz
vimrice-7217c7749e5403c9c7856c1d12c7986eb9c3b460.zip
Goodbye vim, been using neovim for ages now; home directory cleanup
Diffstat (limited to 'dotfiles/.local/share/nvim/site/autoload/airline/extensions')
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/ale.vim88
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/branch.vim312
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/bufferline.vim29
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/capslock.vim16
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/commandt.vim18
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/csv.vim32
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/ctrlp.vim81
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/ctrlspace.vim20
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/cursormode.vim132
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/default.vim100
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/denite.vim41
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/eclim.vim61
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/example.vim55
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/fugitiveline.vim49
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/grepper.vim19
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/gutentags.vim17
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/hunks.vim93
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/keymap.vim20
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/languageclient.vim101
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/localsearch.vim35
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/neomake.vim36
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/netrw.vim34
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/nrrwrgn.vim57
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/obsession.vim22
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/po.vim81
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/promptline.vim35
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/quickfix.vim58
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/syntastic.vim43
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline.vim213
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/autoshow.vim55
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/buffers.vim246
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/buflist.vim77
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/builder.vim232
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/ctrlspace.vim157
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/default.vim43
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/jsformatter.vim15
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/tabnr.vim14
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/unique_tail.vim41
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/unique_tail_improved.vim91
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/tabs.vim124
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/xtabline.vim397
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tagbar.vim58
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/term.vim43
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/tmuxline.vim27
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/undotree.vim28
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/unicode.vim24
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/unite.vim24
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/vimagit.vim34
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/vimtex.vim84
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/virtualenv.vim31
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/whitespace.vim171
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/windowswap.vim29
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/wordcount.vim117
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/wordcount/formatters/default.vim39
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/xkblayout.vim24
-rw-r--r--dotfiles/.local/share/nvim/site/autoload/airline/extensions/ycm.vim37
56 files changed, 4160 insertions, 0 deletions
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/ale.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/ale.vim
new file mode 100644
index 0000000..71f6317
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/ale.vim
@@ -0,0 +1,88 @@
+" MIT License. Copyright (c) 2013-2018 Bjorn Neergaard, w0rp et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+function! s:airline_ale_count(cnt, symbol)
+ return a:cnt ? a:symbol. a:cnt : ''
+endfunction
+
+function! s:airline_ale_get_line_number(cnt, type) abort
+ if a:cnt == 0
+ return ''
+ endif
+
+ let buffer = bufnr('')
+ let problem_type = (a:type ==# 'error') ? 'E' : 'W'
+ let problems = copy(ale#engine#GetLoclist(buffer))
+
+ call filter(problems, 'v:val.bufnr is buffer && v:val.type is# problem_type')
+
+ if empty(problems)
+ return ''
+ endif
+
+ let open_lnum_symbol = get(g:, 'airline#extensions#ale#open_lnum_symbol', '(L')
+ let close_lnum_symbol = get(g:, 'airline#extensions#ale#close_lnum_symbol', ')')
+
+ return open_lnum_symbol . problems[0].lnum . close_lnum_symbol
+endfunction
+
+function! airline#extensions#ale#get(type)
+ if !exists(':ALELint')
+ return ''
+ endif
+
+ let error_symbol = get(g:, 'airline#extensions#ale#error_symbol', 'E:')
+ let warning_symbol = get(g:, 'airline#extensions#ale#warning_symbol', 'W:')
+ let checking_symbol = get(g:, 'airline#extensions#ale#checking_symbol', '...')
+ let show_line_numbers = get(g:, 'airline#extensions#ale#show_line_numbers', 1)
+
+ let is_err = a:type ==# 'error'
+
+ if ale#engine#IsCheckingBuffer(bufnr('')) == 1
+ return is_err ? '' : checking_symbol
+ endif
+
+ let symbol = is_err ? error_symbol : warning_symbol
+
+ let counts = ale#statusline#Count(bufnr(''))
+ if type(counts) == type({}) && has_key(counts, 'error')
+ " Use the current Dictionary format.
+ let errors = counts.error + counts.style_error
+ let num = is_err ? errors : counts.total - errors
+ else
+ " Use the old List format.
+ let num = is_err ? counts[0] : counts[1]
+ endif
+
+ if show_line_numbers == 1
+ return s:airline_ale_count(num, symbol) . <sid>airline_ale_get_line_number(num, a:type)
+ else
+ return s:airline_ale_count(num, symbol)
+ endif
+endfunction
+
+function! airline#extensions#ale#get_warning()
+ return airline#extensions#ale#get('warning')
+endfunction
+
+function! airline#extensions#ale#get_error()
+ return airline#extensions#ale#get('error')
+endfunction
+
+function! airline#extensions#ale#init(ext)
+ call airline#parts#define_function('ale_error_count', 'airline#extensions#ale#get_error')
+ call airline#parts#define_function('ale_warning_count', 'airline#extensions#ale#get_warning')
+ augroup airline_ale
+ autocmd!
+ autocmd CursorHold,BufWritePost * call <sid>ale_refresh()
+ autocmd User ALEJobStarted,ALELintPost call <sid>ale_refresh()
+ augroup END
+endfunction
+
+function! s:ale_refresh()
+ if get(g:, 'airline_skip_empty_sections', 0)
+ exe ':AirlineRefresh'
+ endif
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/branch.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/branch.vim
new file mode 100644
index 0000000..fcf4d3a
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/branch.vim
@@ -0,0 +1,312 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+" s:vcs_config contains static configuration of VCSes and their status relative
+" to the active file.
+" 'branch' - The name of currently active branch. This field is empty iff it
+" has not been initialized yet or the current file is not in
+" an active branch.
+" 'untracked' - Cache of untracked files represented as a dictionary with files
+" as keys. A file has a not exists symbol set as its value if it
+" is untracked. A file is present in this dictionary iff its
+" status is considered up to date.
+" 'untracked_mark' - used as regexp to test against the output of 'cmd'
+let s:vcs_config = {
+\ 'git': {
+\ 'exe': 'git',
+\ 'cmd': 'git status --porcelain -- ',
+\ 'untracked_mark': '??',
+\ 'exclude': '\.git',
+\ 'update_branch': 's:update_git_branch',
+\ 'display_branch': 's:display_git_branch',
+\ 'branch': '',
+\ 'untracked': {},
+\ },
+\ 'mercurial': {
+\ 'exe': 'hg',
+\ 'cmd': 'hg status -u -- ',
+\ 'untracked_mark': '?',
+\ 'exclude': '\.hg',
+\ 'update_branch': 's:update_hg_branch',
+\ 'display_branch': 's:display_hg_branch',
+\ 'branch': '',
+\ 'untracked': {},
+\ },
+\}
+
+" Initializes b:buffer_vcs_config. b:buffer_vcs_config caches the branch and
+" untracked status of the file in the buffer. Caching those fields is necessary,
+" because s:vcs_config may be updated asynchronously and s:vcs_config fields may
+" be invalid during those updates. b:buffer_vcs_config fields are updated
+" whenever corresponding fields in s:vcs_config are updated or an inconsistency
+" is detected during update_* operation.
+"
+" b:airline_head caches the head string it is empty iff it needs to be
+" recalculated. b:airline_head is recalculated based on b:buffer_vcs_config.
+function! s:init_buffer()
+ let b:buffer_vcs_config = {}
+ for vcs in keys(s:vcs_config)
+ let b:buffer_vcs_config[vcs] = {
+ \ 'branch': '',
+ \ 'untracked': '',
+ \ }
+ endfor
+ unlet! b:airline_head
+endfunction
+
+let s:head_format = get(g:, 'airline#extensions#branch#format', 0)
+if s:head_format == 1
+ function! s:format_name(name)
+ return fnamemodify(a:name, ':t')
+ endfunction
+elseif s:head_format == 2
+ function! s:format_name(name)
+ return pathshorten(a:name)
+ endfunction
+elseif type(s:head_format) == type('')
+ function! s:format_name(name)
+ return call(s:head_format, [a:name])
+ endfunction
+else
+ function! s:format_name(name)
+ return a:name
+ endfunction
+endif
+
+
+" Fugitive special revisions. call '0' "staging" ?
+let s:names = {'0': 'index', '1': 'orig', '2':'fetch', '3':'merge'}
+let s:sha1size = get(g:, 'airline#extensions#branch#sha1_len', 7)
+
+function! s:update_git_branch()
+ if !airline#util#has_fugitive()
+ let s:vcs_config['git'].branch = ''
+ return
+ endif
+
+ let s:vcs_config['git'].branch = exists("*FugitiveHead") ?
+ \ FugitiveHead(s:sha1size) : fugitive#head(s:sha1size)
+ if s:vcs_config['git'].branch is# 'master' && winwidth(0) < 81
+ " Shorten default a bit
+ let s:vcs_config['git'].branch='mas'
+ endif
+endfunction
+
+function! s:display_git_branch()
+ let name = b:buffer_vcs_config['git'].branch
+ try
+ let commit = fugitive#buffer().commit()
+
+ if has_key(s:names, commit)
+ let name = get(s:names, commit)."(".name.")"
+ elseif !empty(commit)
+ let ref = fugitive#repo().git_chomp('describe', '--all', '--exact-match', commit)
+ if ref !~ "^fatal: no tag exactly matches"
+ let name = s:format_name(substitute(ref, '\v\C^%(heads/|remotes/|tags/)=','',''))."(".name.")"
+ else
+ let name = matchstr(commit, '.\{'.s:sha1size.'}')."(".name.")"
+ endif
+ endif
+ catch
+ endtry
+
+ return name
+endfunction
+
+function! s:update_hg_branch()
+ if airline#util#has_lawrencium()
+ let cmd='LC_ALL=C hg qtop'
+ let stl=lawrencium#statusline()
+ let file=expand('%:p')
+ if !empty(stl) && get(b:, 'airline_do_mq_check', 1)
+ if g:airline#init#vim_async
+ noa call airline#async#get_mq_async(cmd, file)
+ elseif has("nvim")
+ noa call airline#async#nvim_get_mq_async(cmd, file)
+ else
+ " remove \n at the end of the command
+ let output=system(cmd)[0:-2]
+ noa call airline#async#mq_output(output, file)
+ endif
+ endif
+ " do not do mq check anymore
+ let b:airline_do_mq_check = 0
+ if exists("b:mq") && !empty(b:mq)
+ if stl is# 'default'
+ " Shorten default a bit
+ let stl='def'
+ endif
+ let stl.=' ['.b:mq.']'
+ endif
+ let s:vcs_config['mercurial'].branch = stl
+ else
+ let s:vcs_config['mercurial'].branch = ''
+ endif
+endfunction
+
+function! s:display_hg_branch()
+ return b:buffer_vcs_config['mercurial'].branch
+endfunction
+
+function! s:update_branch()
+ for vcs in keys(s:vcs_config)
+ call {s:vcs_config[vcs].update_branch}()
+ if b:buffer_vcs_config[vcs].branch != s:vcs_config[vcs].branch
+ let b:buffer_vcs_config[vcs].branch = s:vcs_config[vcs].branch
+ unlet! b:airline_head
+ endif
+ endfor
+endfunction
+
+function! airline#extensions#branch#update_untracked_config(file, vcs)
+ if !has_key(s:vcs_config[a:vcs].untracked, a:file)
+ return
+ elseif s:vcs_config[a:vcs].untracked[a:file] != b:buffer_vcs_config[a:vcs].untracked
+ let b:buffer_vcs_config[a:vcs].untracked = s:vcs_config[a:vcs].untracked[a:file]
+ unlet! b:airline_head
+ endif
+endfunction
+
+function! s:update_untracked()
+ let file = expand("%:p")
+ if empty(file) || isdirectory(file)
+ return
+ endif
+
+ let needs_update = 1
+ for vcs in keys(s:vcs_config)
+ if file =~ s:vcs_config[vcs].exclude
+ " Skip check for files that live in the exclude directory
+ let needs_update = 0
+ endif
+ if has_key(s:vcs_config[vcs].untracked, file)
+ let needs_update = 0
+ call airline#extensions#branch#update_untracked_config(file, vcs)
+ endif
+ endfor
+
+ if !needs_update
+ return
+ endif
+
+ for vcs in keys(s:vcs_config)
+ let config = s:vcs_config[vcs]
+ if g:airline#init#vim_async
+ " Note that asynchronous update updates s:vcs_config only, and only
+ " s:update_untracked updates b:buffer_vcs_config. If s:vcs_config is
+ " invalidated again before s:update_untracked is called, then we lose the
+ " result of the previous call, i.e. the head string is not updated. It
+ " doesn't happen often in practice, so we let it be.
+ noa call airline#async#vim_vcs_untracked(config, file)
+ else
+ " nvim async or vim without job-feature
+ noa call airline#async#nvim_vcs_untracked(config, file, vcs)
+ endif
+ endfor
+endfunction
+
+function! airline#extensions#branch#head()
+ if !exists('b:buffer_vcs_config')
+ call s:init_buffer()
+ endif
+
+ call s:update_branch()
+ call s:update_untracked()
+
+ if exists('b:airline_head') && !empty(b:airline_head)
+ return b:airline_head
+ endif
+
+ let b:airline_head = ''
+ let vcs_priority = get(g:, "airline#extensions#branch#vcs_priority", ["git", "mercurial"])
+
+ let heads = []
+ for vcs in vcs_priority
+ if !empty(b:buffer_vcs_config[vcs].branch)
+ let heads += [vcs]
+ endif
+ endfor
+
+ for vcs in heads
+ if !empty(b:airline_head)
+ let b:airline_head .= ' | '
+ endif
+ if len(heads) > 1
+ let b:airline_head .= s:vcs_config[vcs].exe .':'
+ endif
+ let b:airline_head .= s:format_name({s:vcs_config[vcs].display_branch}())
+ let b:airline_head .= b:buffer_vcs_config[vcs].untracked
+ endfor
+
+ if empty(heads)
+ if airline#util#has_vcscommand()
+ noa call VCSCommandEnableBufferSetup()
+ if exists('b:VCSCommandBufferInfo')
+ let b:airline_head = s:format_name(get(b:VCSCommandBufferInfo, 0, ''))
+ endif
+ endif
+ endif
+
+ if empty(heads)
+ if airline#util#has_custom_scm()
+ try
+ let Fn = function(g:airline#extensions#branch#custom_head)
+ let b:airline_head = Fn()
+ endtry
+ endif
+ endif
+
+ if exists("g:airline#extensions#branch#displayed_head_limit")
+ let w:displayed_head_limit = g:airline#extensions#branch#displayed_head_limit
+ if len(b:airline_head) > w:displayed_head_limit - 1
+ let b:airline_head = b:airline_head[0:(w:displayed_head_limit - 1)].(&encoding ==? 'utf-8' ? '…' : '.')
+ endif
+ endif
+
+ let minwidth = empty(get(b:, 'airline_hunks', '')) ? 14 : 7
+ let b:airline_head = airline#util#shorten(b:airline_head, 120, minwidth)
+ return b:airline_head
+endfunction
+
+function! airline#extensions#branch#get_head()
+ let head = airline#extensions#branch#head()
+ let empty_message = get(g:, 'airline#extensions#branch#empty_message', '')
+ let symbol = get(g:, 'airline#extensions#branch#symbol', g:airline_symbols.branch)
+ return empty(head)
+ \ ? empty_message
+ \ : printf('%s%s', empty(symbol) ? '' : symbol.(g:airline_symbols.space), head)
+endfunction
+
+function! s:reset_untracked_cache(shellcmdpost)
+ " shellcmdpost - whether function was called as a result of ShellCmdPost hook
+ if !g:airline#init#vim_async && !has('nvim')
+ if a:shellcmdpost
+ " Clear cache only if there was no error or the script uses an
+ " asynchronous interface. Otherwise, cache clearing would overwrite
+ " v:shell_error with a system() call inside get_*_untracked.
+ if v:shell_error
+ return
+ endif
+ endif
+ endif
+
+ let file = expand("%:p")
+ for vcs in keys(s:vcs_config)
+ " Dump the value of the cache for the current file. Partially mitigates the
+ " issue of cache invalidation happening before a call to
+ " s:update_untracked()
+ call airline#extensions#branch#update_untracked_config(file, vcs)
+ let s:vcs_config[vcs].untracked = {}
+ endfor
+endfunction
+
+function! airline#extensions#branch#init(ext)
+ call airline#parts#define_function('branch', 'airline#extensions#branch#get_head')
+
+ autocmd ShellCmdPost,CmdwinLeave * unlet! b:airline_head b:airline_do_mq_check
+ autocmd User AirlineBeforeRefresh unlet! b:airline_head b:airline_do_mq_check
+ autocmd BufWritePost * call s:reset_untracked_cache(0)
+ autocmd ShellCmdPost * call s:reset_untracked_cache(1)
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/bufferline.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/bufferline.vim
new file mode 100644
index 0000000..b7ccc09
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/bufferline.vim
@@ -0,0 +1,29 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !exists('*bufferline#get_status_string')
+ finish
+endif
+
+let s:overwrite = get(g:, 'airline#extensions#bufferline#overwrite_variables', 1)
+
+function! airline#extensions#bufferline#init(ext)
+ if s:overwrite
+ highlight bufferline_selected gui=bold cterm=bold term=bold
+ highlight link bufferline_selected_inactive airline_c_inactive
+ let g:bufferline_inactive_highlight = 'airline_c'
+ let g:bufferline_active_highlight = 'bufferline_selected'
+ let g:bufferline_active_buffer_left = ''
+ let g:bufferline_active_buffer_right = ''
+ let g:bufferline_separator = g:airline_symbols.space
+ endif
+
+ if exists("+autochdir") && &autochdir == 1
+ " if 'acd' is set, vim-airline uses the path section, so we need ot redefine this here as well
+ call airline#parts#define_raw('path', '%{bufferline#refresh_status()}'.bufferline#get_status_string())
+ else
+ call airline#parts#define_raw('file', '%{bufferline#refresh_status()}'.bufferline#get_status_string())
+ endif
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/capslock.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/capslock.vim
new file mode 100644
index 0000000..55b28da
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/capslock.vim
@@ -0,0 +1,16 @@
+" MIT License. Copyright (c) 2014-2018 Mathias Andersson et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !exists('*CapsLockStatusline')
+ finish
+endif
+
+function! airline#extensions#capslock#status()
+ return tolower(CapsLockStatusline()) == '[caps]' ? 'CAPS' : ''
+endfunction
+
+function! airline#extensions#capslock#init(ext)
+ call airline#parts#define_function('capslock', 'airline#extensions#capslock#status')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/commandt.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/commandt.vim
new file mode 100644
index 0000000..1e05a58
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/commandt.vim
@@ -0,0 +1,18 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !get(g:, 'command_t_loaded', 0)
+ finish
+endif
+
+function! airline#extensions#commandt#apply(...)
+ if bufname('%') ==# 'GoToFile'
+ call airline#extensions#apply_left_override('CommandT', '')
+ endif
+endfunction
+
+function! airline#extensions#commandt#init(ext)
+ call a:ext.add_statusline_func('airline#extensions#commandt#apply')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/csv.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/csv.vim
new file mode 100644
index 0000000..d0eb64b
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/csv.vim
@@ -0,0 +1,32 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !get(g:, 'loaded_csv', 0) && !exists(':Table')
+ finish
+endif
+
+let s:column_display = get(g:, 'airline#extensions#csv#column_display', 'Number')
+
+function! airline#extensions#csv#get_column()
+ if exists('*CSV_WCol')
+ if s:column_display ==# 'Name'
+ return '['.CSV_WCol('Name').CSV_WCol().']'
+ else
+ return '['.CSV_WCol().']'
+ endif
+ endif
+ return ''
+endfunction
+
+function! airline#extensions#csv#apply(...)
+ if &ft ==# "csv"
+ call airline#extensions#prepend_to_section('gutter',
+ \ g:airline_left_alt_sep.' %{airline#extensions#csv#get_column()}')
+ endif
+endfunction
+
+function! airline#extensions#csv#init(ext)
+ call a:ext.add_statusline_func('airline#extensions#csv#apply')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/ctrlp.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/ctrlp.vim
new file mode 100644
index 0000000..c477a6a
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/ctrlp.vim
@@ -0,0 +1,81 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !get(g:, 'loaded_ctrlp', 0)
+ finish
+endif
+
+let s:color_template = get(g:, 'airline#extensions#ctrlp#color_template', 'insert')
+
+function! airline#extensions#ctrlp#generate_color_map(dark, light, white)
+ return {
+ \ 'CtrlPdark' : a:dark,
+ \ 'CtrlPlight' : a:light,
+ \ 'CtrlPwhite' : a:white,
+ \ 'CtrlParrow1' : [ a:light[1] , a:white[1] , a:light[3] , a:white[3] , '' ] ,
+ \ 'CtrlParrow2' : [ a:white[1] , a:light[1] , a:white[3] , a:light[3] , '' ] ,
+ \ 'CtrlParrow3' : [ a:light[1] , a:dark[1] , a:light[3] , a:dark[3] , '' ] ,
+ \ }
+endfunction
+
+function! airline#extensions#ctrlp#load_theme(palette)
+ if exists('a:palette.ctrlp')
+ let theme = a:palette.ctrlp
+ else
+ let s:color_template = has_key(a:palette, s:color_template) ? s:color_template : 'insert'
+ let theme = airline#extensions#ctrlp#generate_color_map(
+ \ a:palette[s:color_template]['airline_c'],
+ \ a:palette[s:color_template]['airline_b'],
+ \ a:palette[s:color_template]['airline_a'])
+ endif
+ for key in keys(theme)
+ call airline#highlighter#exec(key, theme[key])
+ endfor
+endfunction
+
+" Arguments: focus, byfname, regexp, prv, item, nxt, marked
+function! airline#extensions#ctrlp#ctrlp_airline(...)
+ let b = airline#builder#new({'active': 1})
+ if a:2 == 'file'
+ call b.add_section_spaced('CtrlPlight', 'by fname')
+ endif
+ if a:3
+ call b.add_section_spaced('CtrlPlight', 'regex')
+ endif
+ if get(g:, 'airline#extensions#ctrlp#show_adjacent_modes', 1)
+ call b.add_section_spaced('CtrlPlight', a:4)
+ call b.add_section_spaced('CtrlPwhite', a:5)
+ call b.add_section_spaced('CtrlPlight', a:6)
+ else
+ call b.add_section_spaced('CtrlPwhite', a:5)
+ endif
+ call b.add_section_spaced('CtrlPdark', a:7)
+ call b.split()
+ call b.add_section_spaced('CtrlPdark', a:1)
+ call b.add_section_spaced('CtrlPdark', a:2)
+ call b.add_section_spaced('CtrlPlight', '%{getcwd()}')
+ return b.build()
+endfunction
+
+" Argument: len
+function! airline#extensions#ctrlp#ctrlp_airline_status(...)
+ let len = '%#CtrlPdark# '.a:1
+ let dir = '%=%<%#CtrlParrow3#'.g:airline_right_sep.'%#CtrlPlight# '.getcwd().' %*'
+ return len.dir
+endfunction
+
+function! airline#extensions#ctrlp#apply(...)
+ " disable statusline overwrite if ctrlp already did it
+ return match(&statusline, 'CtrlPwhite') >= 0 ? -1 : 0
+endfunction
+
+function! airline#extensions#ctrlp#init(ext)
+ let g:ctrlp_status_func = {
+ \ 'main': 'airline#extensions#ctrlp#ctrlp_airline',
+ \ 'prog': 'airline#extensions#ctrlp#ctrlp_airline_status',
+ \ }
+ call a:ext.add_statusline_func('airline#extensions#ctrlp#apply')
+ call a:ext.add_theme_func('airline#extensions#ctrlp#load_theme')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/ctrlspace.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/ctrlspace.vim
new file mode 100644
index 0000000..66f29a5
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/ctrlspace.vim
@@ -0,0 +1,20 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+let s:spc = g:airline_symbols.space
+let s:padding = s:spc . s:spc . s:spc
+let s:cs = ctrlspace#context#Configuration().Symbols.CS
+
+function! airline#extensions#ctrlspace#statusline(...)
+ let b = airline#builder#new({ 'active': 1 })
+ call b.add_section('airline_b', s:cs . s:padding . ctrlspace#api#StatuslineModeSegment(s:padding))
+ call b.split()
+ call b.add_section('airline_x', s:spc . ctrlspace#api#StatuslineTabSegment() . s:spc)
+ return b.build()
+endfunction
+
+function! airline#extensions#ctrlspace#init(ext)
+ let g:CtrlSpaceStatuslineFunction = "airline#extensions#ctrlspace#statusline()"
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/cursormode.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/cursormode.vim
new file mode 100644
index 0000000..097ddd8
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/cursormode.vim
@@ -0,0 +1,132 @@
+" Copyright (C) 2014 Andrea Cedraro <a.cedraro@gmail.com>
+" Copyright (C) 2017 Eduardo Suarez-Santana <e.suarezsantana@gmail.com>
+"
+" Permission is hereby granted, free of charge, to any person obtaining
+" a copy of this software and associated documentation files (the "Software"),
+" to deal in the Software without restriction, including without limitation
+" the rights to use, copy, modify, merge, publish, distribute, sublicense,
+" and/or sell copies of the Software, and to permit persons to whom the
+" Software is furnished to do so, subject to the following conditions:
+"
+" The above copyright notice and this permission notice shall be included
+" in all copies or substantial portions of the Software.
+"
+" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+" OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+" OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+scriptencoding utf-8
+
+let s:is_win = has('win32') || has('win64')
+let s:is_iTerm = exists('$TERM_PROGRAM') && $TERM_PROGRAM =~# 'iTerm.app'
+let s:is_AppleTerminal = exists('$TERM_PROGRAM') && $TERM_PROGRAM =~# 'Apple_Terminal'
+
+let s:is_good = !has('gui_running') && !s:is_win && !s:is_AppleTerminal
+
+let s:last_mode = ''
+
+if !exists('g:cursormode_exit_mode')
+ let g:cursormode_exit_mode='n'
+endif
+
+function! airline#extensions#cursormode#tmux_escape(escape)
+ return '\033Ptmux;'.substitute(a:escape, '\\033', '\\033\\033', 'g').'\033\\'
+endfunction
+
+let s:iTerm_escape_template = '\033]Pl%s\033\\'
+let s:xterm_escape_template = '\033]12;%s\007'
+
+function! s:get_mode()
+ return call(get(g:, 'cursormode_mode_func', 'mode'), [])
+endfunction
+
+function! airline#extensions#cursormode#set(...)
+ let mode = s:get_mode()
+ if mode !=# s:last_mode
+ let s:last_mode = mode
+ call s:set_cursor_color_for(mode)
+ endif
+ return ''
+endfunction
+
+function! s:set_cursor_color_for(mode)
+ let mode = a:mode
+ for mode in [a:mode, a:mode.&background]
+ if has_key(s:color_map, mode)
+ try
+ let save_eventignore = &eventignore
+ set eventignore=all
+ let save_shelltemp = &shelltemp
+ set noshelltemp
+
+ silent call system(s:build_command(s:color_map[mode]))
+ return
+ finally
+ let &shelltemp = save_shelltemp
+ let &eventignore = save_eventignore
+ endtry
+ endif
+ endfor
+endfunction
+
+function! s:build_command(color)
+ if s:is_iTerm
+ let color = substitute(a:color, '^#', '', '')
+ let escape_template = s:iTerm_escape_template
+ else
+ let color = a:color
+ let escape_template = s:xterm_escape_template
+ endif
+
+ let escape = printf(escape_template, color)
+ if exists('$TMUX')
+ let escape = airline#extensions#cursormode#tmux_escape(escape)
+ endif
+ return "printf '".escape."' > /dev/tty"
+endfunction
+
+function! s:get_color_map()
+ if exists('g:cursormode_color_map')
+ return g:cursormode_color_map
+ endif
+
+ try
+ let map = g:cursormode#{g:colors_name}#color_map
+ return map
+ catch
+ return {
+ \ "nlight": "#000000",
+ \ "ndark": "#BBBBBB",
+ \ "i": "#0000BB",
+ \ "v": "#FF5555",
+ \ "V": "#BBBB00",
+ \ "\<C-V>": "#BB00BB",
+ \ }
+ endtry
+endfunction
+
+augroup airline#extensions#cursormode
+ autocmd!
+ autocmd VimLeave * nested call s:set_cursor_color_for(g:cursormode_exit_mode)
+ " autocmd VimEnter * call airline#extensions#cursormode#activate()
+ autocmd Colorscheme * call airline#extensions#cursormode#activate()
+augroup END
+
+function! airline#extensions#cursormode#activate()
+ let s:color_map = s:get_color_map()
+ call airline#extensions#cursormode#set()
+endfunction
+
+function! airline#extensions#cursormode#apply(...)
+ let w:airline_section_a = get(w:, 'airline_section_a', g:airline_section_a)
+ let w:airline_section_a .= '%{airline#extensions#cursormode#set()}'
+endfunction
+
+function! airline#extensions#cursormode#init(ext)
+ let s:color_map = s:get_color_map()
+ call a:ext.add_statusline_func('airline#extensions#cursormode#apply')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/default.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/default.vim
new file mode 100644
index 0000000..f9ca3d4
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/default.vim
@@ -0,0 +1,100 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+let s:section_use_groups = get(g:, 'airline#extensions#default#section_use_groupitems', 1)
+let s:section_truncate_width = get(g:, 'airline#extensions#default#section_truncate_width', {
+ \ 'b': 79,
+ \ 'x': 60,
+ \ 'y': 88,
+ \ 'z': 45,
+ \ 'warning': 80,
+ \ 'error': 80,
+ \ })
+let s:layout = get(g:, 'airline#extensions#default#layout', [
+ \ [ 'a', 'b', 'c' ],
+ \ [ 'x', 'y', 'z', 'warning', 'error' ]
+ \ ])
+
+function! s:get_section(winnr, key, ...)
+ if has_key(s:section_truncate_width, a:key)
+ if winwidth(a:winnr) < s:section_truncate_width[a:key]
+ return ''
+ endif
+ endif
+ let spc = g:airline_symbols.space
+ if !exists('g:airline_section_{a:key}')
+ return ''
+ endif
+ let text = airline#util#getwinvar(a:winnr, 'airline_section_'.a:key, g:airline_section_{a:key})
+ let [prefix, suffix] = [get(a:000, 0, '%('.spc), get(a:000, 1, spc.'%)')]
+ return empty(text) ? '' : prefix.text.suffix
+endfunction
+
+function! s:build_sections(builder, context, keys)
+ for key in a:keys
+ if (key == 'warning' || key == 'error') && !a:context.active
+ continue
+ endif
+ call s:add_section(a:builder, a:context, key)
+ endfor
+endfunction
+
+" There still is a highlighting bug when using groups %(%) in the statusline,
+" deactivate it, unless it is fixed (7.4.1511)
+if s:section_use_groups && (v:version >= 704 || (v:version >= 703 && has('patch81')))
+ function! s:add_section(builder, context, key)
+ let condition = (a:key is# "warning" || a:key is# "error") &&
+ \ (v:version == 704 && !has("patch1511"))
+ " i have no idea why the warning section needs special treatment, but it's
+ " needed to prevent separators from showing up
+ if ((a:key == 'error' || a:key == 'warning') && empty(s:get_section(a:context.winnr, a:key)))
+ return
+ endif
+ if condition
+ call a:builder.add_raw('%(')
+ endif
+ call a:builder.add_section('airline_'.a:key, s:get_section(a:context.winnr, a:key))
+ if condition
+ call a:builder.add_raw('%)')
+ endif
+ endfunction
+else
+ " older version don't like the use of %(%)
+ function! s:add_section(builder, context, key)
+ if ((a:key == 'error' || a:key == 'warning') && empty(s:get_section(a:context.winnr, a:key)))
+ return
+ endif
+ if a:key == 'warning'
+ call a:builder.add_raw('%#airline_warning#'.s:get_section(a:context.winnr, a:key))
+ elseif a:key == 'error'
+ call a:builder.add_raw('%#airline_error#'.s:get_section(a:context.winnr, a:key))
+ else
+ call a:builder.add_section('airline_'.a:key, s:get_section(a:context.winnr, a:key))
+ endif
+ endfunction
+endif
+
+function! airline#extensions#default#apply(builder, context)
+ let winnr = a:context.winnr
+ let active = a:context.active
+
+ if airline#util#getwinvar(winnr, 'airline_render_left', active || (!active && !g:airline_inactive_collapse))
+ call s:build_sections(a:builder, a:context, s:layout[0])
+ else
+ let text = s:get_section(winnr, 'c')
+ if empty(text)
+ let text = ' %f%m '
+ endif
+ call a:builder.add_section('airline_c'.(a:context.bufnr), text)
+ endif
+
+ call a:builder.split(s:get_section(winnr, 'gutter', '', ''))
+
+ if airline#util#getwinvar(winnr, 'airline_render_right', 1)
+ call s:build_sections(a:builder, a:context, s:layout[1])
+ endif
+
+ return 1
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/denite.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/denite.vim
new file mode 100644
index 0000000..e3c1f3b
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/denite.vim
@@ -0,0 +1,41 @@
+" MIT License. Copyright (c) 2017-2018 Thomas Dy et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !get(g:, 'loaded_denite', 0)
+ finish
+endif
+
+" Denite does not use vim's built-in modal editing but has a custom prompt
+" that implements its own insert/normal mode so we have to handle changing the
+" highlight
+function! airline#extensions#denite#check_denite_mode(bufnr)
+ if &filetype != 'denite'
+ return ''
+ endif
+ let mode = split(denite#get_status_mode(), ' ')
+ let mode = tolower(mode[1])
+ if !exists('b:denite_mode_cache') || mode != b:denite_mode_cache
+ call airline#highlighter#highlight([mode], a:bufnr)
+ let b:denite_mode_cache = mode
+ endif
+ return ''
+endfunction
+
+function! airline#extensions#denite#apply(...)
+ if &ft == 'denite'
+ let w:airline_skip_empty_sections = 0
+ call a:1.add_section('airline_a', ' Denite %{airline#extensions#denite#check_denite_mode('.a:2['bufnr'].')}')
+ call a:1.add_section('airline_c', ' %{denite#get_status_sources()}')
+ call a:1.split()
+ call a:1.add_section('airline_y', ' %{denite#get_status_path()} ')
+ call a:1.add_section('airline_z', ' %{denite#get_status_linenr()} ')
+ return 1
+ endif
+endfunction
+
+function! airline#extensions#denite#init(ext)
+ call denite#custom#option('_', 'statusline', 0)
+ call a:ext.add_statusline_func('airline#extensions#denite#apply')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/eclim.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/eclim.vim
new file mode 100644
index 0000000..3c48d75
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/eclim.vim
@@ -0,0 +1,61 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !exists(':ProjectCreate')
+ finish
+endif
+
+function! airline#extensions#eclim#creat_line(...)
+ if &filetype == "tree"
+ let builder = a:1
+ call builder.add_section('airline_a', ' Project ')
+ call builder.add_section('airline_b', ' %f ')
+ call builder.add_section('airline_c', '')
+ return 1
+ endif
+endfunction
+
+function! airline#extensions#eclim#get_warnings()
+ " Cache vavlues, so that it isn't called too often
+ if exists("s:eclim_errors") &&
+ \ get(b:, 'airline_changenr', 0) == changenr()
+ return s:eclim_errors
+ endif
+ let eclimList = eclim#display#signs#GetExisting()
+ let s:eclim_errors = ''
+
+ if !empty(eclimList)
+ " Remove any non-eclim signs (see eclim#display#signs#Update)
+ " First check for just errors since they are more important.
+ " If there are no errors, then check for warnings.
+ let errorList = filter(copy(eclimList), 'v:val.name =~ "^\\(qf_\\)\\?\\(error\\)$"')
+
+ if (empty(errorList))
+ " use the warnings
+ call filter(eclimList, 'v:val.name =~ "^\\(qf_\\)\\?\\(warning\\)$"')
+ let type = 'W'
+ else
+ " Use the errors
+ let eclimList = errorList
+ let type = 'E'
+ endif
+
+ if !empty(eclimList)
+ let errorsLine = eclimList[0]['line']
+ let errorsNumber = len(eclimList)
+ let errors = "[Eclim:" . type . " line:".string(errorsLine)." (".string(errorsNumber).")]"
+ if !exists(':SyntasticCheck') || SyntasticStatuslineFlag() == ''
+ let s:eclim_errors = errors.(g:airline_symbols.space)
+ endif
+ endif
+ endif
+ let b:airline_changenr = changenr()
+ return s:eclim_errors
+endfunction
+
+function! airline#extensions#eclim#init(ext)
+ call airline#parts#define_function('eclim', 'airline#extensions#eclim#get_warnings')
+ call a:ext.add_statusline_func('airline#extensions#eclim#creat_line')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/example.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/example.vim
new file mode 100644
index 0000000..50a327d
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/example.vim
@@ -0,0 +1,55 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+" we don't actually want this loaded :P
+finish
+
+" Due to some potential rendering issues, the use of the `space` variable is
+" recommended.
+let s:spc = g:airline_symbols.space
+
+" Extension specific variables can be defined the usual fashion.
+if !exists('g:airline#extensions#example#number_of_cats')
+ let g:airline#extensions#example#number_of_cats = 42
+endif
+
+" First we define an init function that will be invoked from extensions.vim
+function! airline#extensions#example#init(ext)
+
+ " Here we define a new part for the plugin. This allows users to place this
+ " extension in arbitrary locations.
+ call airline#parts#define_raw('cats', '%{airline#extensions#example#get_cats()}')
+
+ " Next up we add a funcref so that we can run some code prior to the
+ " statusline getting modifed.
+ call a:ext.add_statusline_func('airline#extensions#example#apply')
+
+ " You can also add a funcref for inactive statuslines.
+ " call a:ext.add_inactive_statusline_func('airline#extensions#example#unapply')
+endfunction
+
+" This function will be invoked just prior to the statusline getting modified.
+function! airline#extensions#example#apply(...)
+ " First we check for the filetype.
+ if &filetype == "nyancat"
+
+ " Let's say we want to append to section_c, first we check if there's
+ " already a window-local override, and if not, create it off of the global
+ " section_c.
+ let w:airline_section_c = get(w:, 'airline_section_c', g:airline_section_c)
+
+ " Then we just append this extenion to it, optionally using separators.
+ let w:airline_section_c .= s:spc.g:airline_left_alt_sep.s:spc.'%{airline#extensions#example#get_cats()}'
+ endif
+endfunction
+
+" Finally, this function will be invoked from the statusline.
+function! airline#extensions#example#get_cats()
+ let cats = ''
+ for i in range(1, g:airline#extensions#example#number_of_cats)
+ let cats .= ' (,,,)=(^.^)=(,,,) '
+ endfor
+ return cats
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/fugitiveline.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/fugitiveline.vim
new file mode 100644
index 0000000..5dab995
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/fugitiveline.vim
@@ -0,0 +1,49 @@
+" MIT License. Copyright (c) 2017-2018 Cimbali et al
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !airline#util#has_fugitive()
+ finish
+endif
+
+
+if exists("+autochdir") && &autochdir == 1
+ let s:fmod = ':p'
+else
+ let s:fmod = ':.'
+endif
+
+function! airline#extensions#fugitiveline#bufname()
+ if !exists('b:fugitive_name')
+ let b:fugitive_name = ''
+ try
+ if bufname('%') =~? '^fugitive:' && exists('*FugitiveReal')
+ let b:fugitive_name = FugitiveReal(bufname('%'))
+ elseif exists('b:git_dir')
+ let buffer = fugitive#buffer()
+ if buffer.type('blob')
+ let b:fugitive_name = buffer.repo().translate(buffer.path('/'))
+ endif
+ endif
+ catch
+ endtry
+ endif
+
+ if empty(b:fugitive_name)
+ return fnamemodify(bufname('%'), s:fmod)
+ else
+ return fnamemodify(b:fugitive_name, s:fmod)
+ endif
+endfunction
+
+function! airline#extensions#fugitiveline#init(ext)
+ if exists("+autochdir") && &autochdir == 1
+ " if 'acd' is set, vim-airline uses the path section, so we need to redefine this here as well
+ call airline#parts#define_raw('path', '%<%{airline#extensions#fugitiveline#bufname()}%m')
+ else
+ call airline#parts#define_raw('file', '%<%{airline#extensions#fugitiveline#bufname()}%m')
+ endif
+ autocmd ShellCmdPost,CmdwinLeave * unlet! b:fugitive_name
+ autocmd User AirlineBeforeRefresh unlet! b:fugitive_name
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/grepper.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/grepper.vim
new file mode 100644
index 0000000..3e5debf
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/grepper.vim
@@ -0,0 +1,19 @@
+" MIT License. Copyright (c) 2014-2018 Mathias Andersson et al.
+" vim: et ts=2 sts=2 sw=2
+
+" Heavily derived from the Gutentags extension
+
+scriptencoding utf-8
+
+if !get(g:, 'loaded_grepper', 0)
+ finish
+endif
+
+function! airline#extensions#grepper#status()
+ let msg = grepper#statusline()
+ return empty(msg) ? '' : 'grepper'
+endfunction
+
+function! airline#extensions#grepper#init(ext)
+ call airline#parts#define_function('grepper', 'airline#extensions#grepper#status')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/gutentags.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/gutentags.vim
new file mode 100644
index 0000000..4af2d78
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/gutentags.vim
@@ -0,0 +1,17 @@
+" MIT License. Copyright (c) 2014-2018 Mathias Andersson et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !get(g:, 'loaded_gutentags', 0)
+ finish
+endif
+
+function! airline#extensions#gutentags#status()
+ let msg = gutentags#statusline()
+ return empty(msg) ? '' : 'Gen. ' . msg
+endfunction
+
+function! airline#extensions#gutentags#init(ext)
+ call airline#parts#define_function('gutentags', 'airline#extensions#gutentags#status')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/hunks.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/hunks.vim
new file mode 100644
index 0000000..aba84cc
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/hunks.vim
@@ -0,0 +1,93 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !get(g:, 'loaded_signify', 0) && !get(g:, 'loaded_gitgutter', 0) && !get(g:, 'loaded_changes', 0) && !get(g:, 'loaded_quickfixsigns', 0)
+ finish
+endif
+
+let s:non_zero_only = get(g:, 'airline#extensions#hunks#non_zero_only', 0)
+let s:hunk_symbols = get(g:, 'airline#extensions#hunks#hunk_symbols', ['+', '~', '-'])
+
+function! s:get_hunks_signify()
+ let hunks = sy#repo#get_stats()
+ if hunks[0] >= 0
+ return hunks
+ endif
+ return []
+endfunction
+
+function! s:is_branch_empty()
+ return exists('*airline#extensions#branch#head') &&
+ \ empty(get(b:, 'airline_head', ''))
+endfunction
+
+function! s:get_hunks_gitgutter()
+ if !get(g:, 'gitgutter_enabled', 0) || s:is_branch_empty()
+ return ''
+ endif
+ return GitGutterGetHunkSummary()
+endfunction
+
+function! s:get_hunks_changes()
+ if !get(b:, 'changes_view_enabled', 0) || s:is_branch_empty()
+ return []
+ endif
+ let hunks = changes#GetStats()
+ return hunks == [0, 0, 0] ? [] : hunks
+endfunction
+
+function! s:get_hunks_empty()
+ return ''
+endfunction
+
+function! s:get_hunks()
+ if !exists('b:source_func') || get(b:, 'source_func', '') is# 's:get_hunks_empty'
+ if get(g:, 'loaded_signify') && sy#buffer_is_active()
+ let b:source_func = 's:get_hunks_signify'
+ elseif exists('*GitGutterGetHunkSummary')
+ let b:source_func = 's:get_hunks_gitgutter'
+ elseif exists('*changes#GetStats')
+ let b:source_func = 's:get_hunks_changes'
+ elseif exists('*quickfixsigns#vcsdiff#GetHunkSummary')
+ let b:source_func = 'quickfixsigns#vcsdiff#GetHunkSummary'
+ else
+ let b:source_func = 's:get_hunks_empty'
+ endif
+ endif
+ return {b:source_func}()
+endfunction
+
+function! airline#extensions#hunks#get_hunks()
+ if !get(w:, 'airline_active', 0)
+ return ''
+ endif
+ " Cache values, so that it isn't called too often
+ if exists("b:airline_hunks") &&
+ \ get(b:, 'airline_changenr', 0) == b:changedtick &&
+ \ winwidth(0) == get(s:, 'airline_winwidth', 0) &&
+ \ get(b:, 'source_func', '') isnot# 's:get_hunks_signify' &&
+ \ get(b:, 'source_func', '') isnot# 's:get_hunks_gitgutter' &&
+ \ get(b:, 'source_func', '') isnot# 's:get_hunks_empty' &&
+ \ get(b:, 'source_func', '') isnot# 's:get_hunks_changes'
+ return b:airline_hunks
+ endif
+ let hunks = s:get_hunks()
+ let string = ''
+ if !empty(hunks)
+ for i in [0, 1, 2]
+ if (s:non_zero_only == 0 && winwidth(0) > 100) || hunks[i] > 0
+ let string .= printf('%s%s ', s:hunk_symbols[i], hunks[i])
+ endif
+ endfor
+ endif
+ let b:airline_hunks = string
+ let b:airline_changenr = b:changedtick
+ let s:airline_winwidth = winwidth(0)
+ return string
+endfunction
+
+function! airline#extensions#hunks#init(ext)
+ call airline#parts#define_function('hunks', 'airline#extensions#hunks#get_hunks')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/keymap.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/keymap.vim
new file mode 100644
index 0000000..c09c68b
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/keymap.vim
@@ -0,0 +1,20 @@
+" MIT License. Copyright (c) 2013-2018 Doron Behar, C.Brabandt et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !has('keymap')
+ finish
+endif
+
+function! airline#extensions#keymap#status()
+ if (get(g:, 'airline#extensions#keymap#enabled', 1) && has('keymap'))
+ return printf('%s', (!empty(&keymap) ? (g:airline_symbols.keymap . ' '. &keymap) : ''))
+ else
+ return ''
+ endif
+endfunction
+
+function! airline#extensions#keymap#init(ext)
+ call airline#parts#define_function('keymap', 'airline#extensions#keymap#status')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/languageclient.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/languageclient.vim
new file mode 100644
index 0000000..82fed28
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/languageclient.vim
@@ -0,0 +1,101 @@
+" MIT License. Copyright (c) 2013-2018 Bjorn Neergaard, w0rp, hallettj et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+let s:error_symbol = get(g:, 'airline#extensions#languageclient#error_symbol', 'E:')
+let s:warning_symbol = get(g:, 'airline#extensions#languageclient#warning_symbol', 'W:')
+let s:show_line_numbers = get(g:, 'airline#extensions#languageclient#show_line_numbers', 1)
+
+" Severity codes from the LSP spec
+let s:severity_error = 1
+let s:severity_warning = 2
+let s:severity_info = 3
+let s:severity_hint = 4
+
+" After each LanguageClient state change `s:diagnostics` will be populated with
+" a map from file names to lists of errors, warnings, informational messages,
+" and hints.
+let s:diagnostics = {}
+
+function! s:languageclient_refresh()
+ if get(g:, 'airline_skip_empty_sections', 0)
+ exe ':AirlineRefresh'
+ endif
+endfunction
+
+function! s:record_diagnostics(state)
+ let result = json_decode(a:state.result)
+ let s:diagnostics = result.diagnostics
+ call s:languageclient_refresh()
+endfunction
+
+function! s:get_diagnostics()
+ call LanguageClient#getState(function("s:record_diagnostics"))
+endfunction
+
+function! s:diagnostics_for_buffer()
+ return get(s:diagnostics, expand('%:p'), [])
+endfunction
+
+function! s:airline_languageclient_count(cnt, symbol)
+ return a:cnt ? a:symbol. a:cnt : ''
+endfunction
+
+function! s:airline_languageclient_get_line_number(type) abort
+ let linenumber_of_first_problem = 0
+ for d in s:diagnostics_for_buffer()
+ if has_key(d, 'severity') && d.severity == a:type
+ let linenumber_of_first_problem = d.range.start.line
+ break
+ endif
+ endfor
+
+ if linenumber_of_first_problem == 0
+ return ''
+ endif
+
+ let open_lnum_symbol = get(g:, 'airline#extensions#languageclient#open_lnum_symbol', '(L')
+ let close_lnum_symbol = get(g:, 'airline#extensions#languageclient#close_lnum_symbol', ')')
+
+ return open_lnum_symbol . linenumber_of_first_problem . close_lnum_symbol
+endfunction
+
+function! airline#extensions#languageclient#get(type)
+ let is_err = a:type == s:severity_error
+ let symbol = is_err ? s:error_symbol : s:warning_symbol
+
+ let cnt = 0
+ for d in s:diagnostics_for_buffer()
+ if has_key(d, 'severity') && d.severity == a:type
+ let cnt += 1
+ endif
+ endfor
+
+ if cnt == 0
+ return ''
+ endif
+
+ if s:show_line_numbers == 1
+ return s:airline_languageclient_count(cnt, symbol) . <sid>airline_languageclient_get_line_number(a:type)
+ else
+ return s:airline_languageclient_count(cnt, symbol)
+ endif
+endfunction
+
+function! airline#extensions#languageclient#get_warning()
+ return airline#extensions#languageclient#get(s:severity_warning)
+endfunction
+
+function! airline#extensions#languageclient#get_error()
+ return airline#extensions#languageclient#get(s:severity_error)
+endfunction
+
+function! airline#extensions#languageclient#init(ext)
+ call airline#parts#define_function('languageclient_error_count', 'airline#extensions#languageclient#get_error')
+ call airline#parts#define_function('languageclient_warning_count', 'airline#extensions#languageclient#get_warning')
+ augroup airline_languageclient
+ autocmd!
+ autocmd User LanguageClientDiagnosticsChanged call <sid>get_diagnostics()
+ augroup END
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/localsearch.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/localsearch.vim
new file mode 100644
index 0000000..685be47
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/localsearch.vim
@@ -0,0 +1,35 @@
+" MIT License. Copyright (c) 2018 mox et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+let s:enabled = get(g:, 'airline#extensions#localsearch#enabled', 1)
+if !get(g:, 'loaded_localsearch', 0) || !s:enabled || get(g:, 'airline#extensions#localsearch#loaded', 0)
+ finish
+endif
+let g:airline#extensions#localsearch#loaded = 001
+
+let s:spc = g:airline_symbols.space
+
+function! airline#extensions#localsearch#load_theme(palette)
+ call airline#highlighter#exec('localsearch_dark', [ '#ffffff' , '#000000' , 15 , 1 , ''])
+endfunction
+
+
+function! airline#extensions#localsearch#init(ext)
+ call a:ext.add_theme_func('airline#extensions#localsearch#load_theme')
+ call a:ext.add_statusline_func('airline#extensions#localsearch#apply')
+endfunction
+
+
+function! airline#extensions#localsearch#apply(...)
+ " first variable is the statusline builder
+ let builder = a:1
+
+ """"" WARNING: the API for the builder is not finalized and may change
+ if exists('#localsearch#WinEnter') " If localsearch mode is enabled
+ call builder.add_section('localsearch_dark', s:spc.airline#section#create('LS').s:spc)
+ endif
+ return 0
+endfunction
+
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/neomake.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/neomake.vim
new file mode 100644
index 0000000..b82d6c3
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/neomake.vim
@@ -0,0 +1,36 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+if !exists(':Neomake')
+ finish
+endif
+
+let s:error_symbol = get(g:, 'airline#extensions#neomake#error_symbol', 'E:')
+let s:warning_symbol = get(g:, 'airline#extensions#neomake#warning_symbol', 'W:')
+
+function! s:get_counts()
+ let l:counts = neomake#statusline#LoclistCounts()
+
+ if empty(l:counts)
+ return neomake#statusline#QflistCounts()
+ else
+ return l:counts
+ endif
+endfunction
+
+function! airline#extensions#neomake#get_warnings()
+ let counts = s:get_counts()
+ let warnings = get(counts, 'W', 0)
+ return warnings ? s:warning_symbol.warnings : ''
+endfunction
+
+function! airline#extensions#neomake#get_errors()
+ let counts = s:get_counts()
+ let errors = get(counts, 'E', 0)
+ return errors ? s:error_symbol.errors : ''
+endfunction
+
+function! airline#extensions#neomake#init(ext)
+ call airline#parts#define_function('neomake_warning_count', 'airline#extensions#neomake#get_warnings')
+ call airline#parts#define_function('neomake_error_count', 'airline#extensions#neomake#get_errors')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/netrw.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/netrw.vim
new file mode 100644
index 0000000..10f024a
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/netrw.vim
@@ -0,0 +1,34 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !exists(':NetrwSettings')
+ finish
+endif
+
+function! airline#extensions#netrw#apply(...)
+ if &ft == 'netrw'
+ let spc = g:airline_symbols.space
+
+ call a:1.add_section('airline_a', spc.'netrw'.spc)
+ if exists('*airline#extensions#branch#get_head')
+ call a:1.add_section('airline_b', spc.'%{airline#extensions#branch#get_head()}'.spc)
+ endif
+ call a:1.add_section('airline_c', spc.'%f'.spc)
+ call a:1.split()
+ call a:1.add_section('airline_y', spc.'%{airline#extensions#netrw#sortstring()}'.spc)
+ return 1
+ endif
+endfunction
+
+function! airline#extensions#netrw#init(ext)
+ let g:netrw_force_overwrite_statusline = 0
+ call a:ext.add_statusline_func('airline#extensions#netrw#apply')
+endfunction
+
+
+function! airline#extensions#netrw#sortstring()
+ let order = (get(g:, 'netrw_sort_direction', 'n') =~ 'n') ? '+' : '-'
+ return g:netrw_sort_by . (g:airline_symbols.space) . '[' . order . ']'
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/nrrwrgn.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/nrrwrgn.vim
new file mode 100644
index 0000000..e97c8a5
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/nrrwrgn.vim
@@ -0,0 +1,57 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !get(g:, 'loaded_nrrw_rgn', 0)
+ finish
+endif
+
+function! airline#extensions#nrrwrgn#apply(...)
+ if exists(":WidenRegion") == 2
+ let spc = g:airline_symbols.space
+ if !exists("*nrrwrgn#NrrwRgnStatus()") || empty(nrrwrgn#NrrwRgnStatus())
+ call a:1.add_section('airline_a', printf('%s[Narrowed%s#%d]', spc, spc, b:nrrw_instn))
+ let bufname=(get(b:, 'orig_buf', 0) ? bufname(b:orig_buf) : substitute(bufname('%'), '^Nrrwrgn_\zs.*\ze_\d\+$', submatch(0), ''))
+ call a:1.add_section('airline_c', spc.bufname.spc)
+ call a:1.split()
+ else
+ let dict=nrrwrgn#NrrwRgnStatus()
+ let vmode = { 'v': 'Char ', 'V': 'Line ', '': 'Block '}
+ let mode = dict.visual ? vmode[dict.visual] : vmode['V']
+ let winwidth = winwidth(0)
+ if winwidth < 80
+ let mode = mode[0]
+ endif
+ let title = (winwidth < 80 ? "Nrrw" : "Narrowed ")
+ let multi = (winwidth < 80 ? 'M' : 'Multi')
+ call a:1.add_section('airline_a', printf('[%s%s%s#%d]%s', (dict.multi ? multi : ""),
+ \ title, mode, b:nrrw_instn, spc))
+ let name = dict.fullname
+ if name !=# '[No Name]'
+ if winwidth > 100
+ " need some space
+ let name = fnamemodify(dict.fullname, ':~')
+ if strlen(name) > 8
+ " shorten name
+ let name = substitute(name, '\(.\)[^/\\]*\([/\\]\)', '\1\2', 'g')
+ endif
+ else
+ let name = fnamemodify(dict.fullname, ':t')
+ endif
+ endif
+ let range=(dict.multi ? '' : printf("[%d-%d]", dict.start[1], dict.end[1]))
+ call a:1.add_section('airline_c', printf("%s %s %s", name, range,
+ \ dict.enabled ? (&encoding ==? 'utf-8' ? "\u2713" : '') : '!'))
+ call a:1.split()
+ call a:1.add_section('airline_x', get(g:, 'airline_section_x').spc)
+ call a:1.add_section('airline_y', spc.get(g:, 'airline_section_y').spc)
+ call a:1.add_section('airline_z', spc.get(g:, 'airline_section_z'))
+ endif
+ return 1
+ endif
+endfunction
+
+function! airline#extensions#nrrwrgn#init(ext)
+ call a:ext.add_statusline_func('airline#extensions#nrrwrgn#apply')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/obsession.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/obsession.vim
new file mode 100644
index 0000000..04105d0
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/obsession.vim
@@ -0,0 +1,22 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !exists('*ObsessionStatus')
+ finish
+endif
+
+let s:spc = g:airline_symbols.space
+
+if !exists('g:airline#extensions#obsession#indicator_text')
+ let g:airline#extensions#obsession#indicator_text = '$'
+endif
+
+function! airline#extensions#obsession#init(ext)
+ call airline#parts#define_function('obsession', 'airline#extensions#obsession#get_status')
+endfunction
+
+function! airline#extensions#obsession#get_status()
+ return ObsessionStatus((g:airline#extensions#obsession#indicator_text . s:spc), '')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/po.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/po.vim
new file mode 100644
index 0000000..3ec2942
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/po.vim
@@ -0,0 +1,81 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+function! airline#extensions#po#shorten()
+ " Format and shorte the output of msgfmt
+ let b:airline_po_stats = substitute(get(b:, 'airline_po_stats', ''), ' \(message\|translation\)s*\.*', '', 'g')
+ let b:airline_po_stats = substitute(b:airline_po_stats, ', ', '/', 'g')
+ if exists("g:airline#extensions#po#displayed_limit")
+ let w:displayed_po_limit = g:airline#extensions#po#displayed_limit
+ if len(b:airline_po_stats) > w:displayed_po_limit - 1
+ let b:airline_po_stats = b:airline_po_stats[0:(w:displayed_po_limit - 2)].(&encoding==?'utf-8' ? '…' : '.'). ']'
+ endif
+ endif
+ if strlen(get(b:, 'airline_po_stats', '')) >= 30 && winwidth(0) < 150
+ let fuzzy = ''
+ let untranslated = ''
+ let messages = ''
+ " Shorten [120 translated, 50 fuzzy, 4 untranslated] to [120T/50F/4U]
+ if b:airline_po_stats =~ 'fuzzy'
+ let fuzzy = substitute(b:airline_po_stats, '.*\(\d\+\) fuzzy.*', '\1F', '')
+ endif
+ if b:airline_po_stats =~ 'untranslated'
+ let untranslated = substitute(b:airline_po_stats, '.*\(\d\+\) untranslated.*', '\1U', '')
+ endif
+ let messages = substitute(b:airline_po_stats, '\(\d\+\) translated.*', '\1T', '')
+ let b:airline_po_stats = printf('%s%s%s', fuzzy, (empty(fuzzy) || empty(untranslated) ? '' : '/'), untranslated)
+ if strlen(b:airline_po_stats) < 8
+ let b:airline_po_stats = messages. (!empty(b:airline_po_stats) ? '/':''). b:airline_po_stats
+ endif
+ endif
+ let b:airline_po_stats = '['.b:airline_po_stats. ']'
+endfunction
+
+function! airline#extensions#po#on_winenter()
+ " only reset cache, if the window size changed
+ if get(b:, 'airline_winwidth', 0) != winwidth(0)
+ let b:airline_winwidth = winwidth(0)
+ " needs re-formatting
+ unlet! b:airline_po_stats
+ endif
+endfunction
+
+function! airline#extensions#po#apply(...)
+ if &ft ==# 'po'
+ call airline#extensions#prepend_to_section('z', '%{airline#extensions#po#stats()}')
+ " Also reset the cache variable, if a window has been split, e.g. the winwidth changed
+ autocmd airline BufWritePost * unlet! b:airline_po_stats
+ autocmd airline WinEnter * call airline#extensions#po#on_winenter()
+ endif
+endfunction
+
+function! airline#extensions#po#stats()
+ if exists('b:airline_po_stats') && !empty(b:airline_po_stats)
+ return b:airline_po_stats
+ endif
+
+ let cmd = 'msgfmt --statistics -o /dev/null -- '
+ if g:airline#init#vim_async
+ call airline#async#get_msgfmt_stat(cmd, expand('%:p'))
+ elseif has("nvim")
+ call airline#async#nvim_get_msgfmt_stat(cmd, expand('%:p'))
+ else
+ let airline_po_stats = system(cmd. shellescape(expand('%:p')))
+ if v:shell_error
+ return ''
+ endif
+ try
+ let b:airline_po_stats = split(airline_po_stats, '\n')[0]
+ catch
+ let b:airline_po_stats = ''
+ endtry
+ call airline#extensions#po#shorten()
+ endif
+ return get(b:, 'airline_po_stats', '')
+endfunction
+
+function! airline#extensions#po#init(ext)
+ call a:ext.add_statusline_func('airline#extensions#po#apply')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/promptline.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/promptline.vim
new file mode 100644
index 0000000..7c90b7c
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/promptline.vim
@@ -0,0 +1,35 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !exists(':PromptlineSnapshot')
+ finish
+endif
+
+if !exists('airline#extensions#promptline#snapshot_file') || !len('airline#extensions#promptline#snapshot_file')
+ finish
+endif
+
+let s:prompt_snapshot_file = get(g:, 'airline#extensions#promptline#snapshot_file', '')
+let s:color_template = get(g:, 'airline#extensions#promptline#color_template', 'normal')
+
+function! airline#extensions#promptline#init(ext)
+ call a:ext.add_theme_func('airline#extensions#promptline#set_prompt_colors')
+endfunction
+
+function! airline#extensions#promptline#set_prompt_colors(palette)
+ let color_template = has_key(a:palette, s:color_template) ? s:color_template : 'normal'
+ let mode_palette = a:palette[color_template]
+
+ if !has_key(g:, 'promptline_symbols')
+ let g:promptline_symbols = {
+ \ 'left' : g:airline_left_sep,
+ \ 'right' : g:airline_right_sep,
+ \ 'left_alt' : g:airline_left_alt_sep,
+ \ 'right_alt' : g:airline_right_alt_sep}
+ endif
+
+ let promptline_theme = promptline#api#create_theme_from_airline(mode_palette)
+ call promptline#api#create_snapshot_with_theme(s:prompt_snapshot_file, promptline_theme)
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/quickfix.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/quickfix.vim
new file mode 100644
index 0000000..2680371
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/quickfix.vim
@@ -0,0 +1,58 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !exists('g:airline#extensions#quickfix#quickfix_text')
+ let g:airline#extensions#quickfix#quickfix_text = 'Quickfix'
+endif
+
+if !exists('g:airline#extensions#quickfix#location_text')
+ let g:airline#extensions#quickfix#location_text = 'Location'
+endif
+
+function! airline#extensions#quickfix#apply(...)
+ if &buftype == 'quickfix'
+ let w:airline_section_a = airline#extensions#quickfix#get_type()
+ let w:airline_section_b = '%{get(w:, "quickfix_title", "")}'
+ let w:airline_section_c = ''
+ let w:airline_section_x = ''
+ endif
+endfunction
+
+function! airline#extensions#quickfix#init(ext)
+ call a:ext.add_statusline_func('airline#extensions#quickfix#apply')
+ call a:ext.add_inactive_statusline_func('airline#extensions#quickfix#inactive_qf_window')
+endfunction
+
+function! airline#extensions#quickfix#inactive_qf_window(...)
+ if getbufvar(a:2.bufnr, '&filetype') is# 'qf' && !empty(airline#util#getwinvar(a:2.winnr, 'quickfix_title', ''))
+ call setwinvar(a:2.winnr, 'airline_section_c', '[%{get(w:, "quickfix_title", "")}] %f %m')
+ endif
+endfunction
+
+function! airline#extensions#quickfix#get_type()
+ if exists("*win_getid") && exists("*getwininfo")
+ let dict = getwininfo(win_getid())
+ if len(dict) > 0 && get(dict[0], 'quickfix', 0) && !get(dict[0], 'loclist', 0)
+ return g:airline#extensions#quickfix#quickfix_text
+ elseif len(dict) > 0 && get(dict[0], 'quickfix', 0) && get(dict[0], 'loclist', 0)
+ return g:airline#extensions#quickfix#location_text
+ endif
+ endif
+ redir => buffers
+ silent ls
+ redir END
+
+ let nr = bufnr('%')
+ for buf in split(buffers, '\n')
+ if match(buf, '\v^\s*'.nr) > -1
+ if match(buf, '\cQuickfix') > -1
+ return g:airline#extensions#quickfix#quickfix_text
+ else
+ return g:airline#extensions#quickfix#location_text
+ endif
+ endif
+ endfor
+ return ''
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/syntastic.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/syntastic.vim
new file mode 100644
index 0000000..be21fb4
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/syntastic.vim
@@ -0,0 +1,43 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !exists(':SyntasticCheck')
+ finish
+endif
+
+let s:error_symbol = get(g:, 'airline#extensions#syntastic#error_symbol', 'E:')
+let s:warning_symbol = get(g:, 'airline#extensions#syntastic#warning_symbol', 'W:')
+
+function! airline#extensions#syntastic#get_warning()
+ return airline#extensions#syntastic#get('warning')
+endfunction
+
+function! airline#extensions#syntastic#get_error()
+ return airline#extensions#syntastic#get('error')
+endfunction
+
+function! airline#extensions#syntastic#get(type)
+ let _backup = get(g:, 'syntastic_stl_format', '')
+ let is_err = (a:type is# 'error')
+ if is_err
+ let g:syntastic_stl_format = get(g:, 'airline#extensions#syntastic#stl_format_err', '%E{[%e(#%fe)]}')
+ else
+ let g:syntastic_stl_format = get(g:, 'airline#extensions#syntastic#stl_format_warn', '%W{[%w(#%fw)]}')
+ endif
+ let cnt = SyntasticStatuslineFlag()
+ if !empty(_backup)
+ let g:syntastic_stl_format = _backup
+ endif
+ if empty(cnt)
+ return ''
+ else
+ return (is_err ? s:error_symbol : s:warning_symbol).cnt
+ endif
+endfunction
+
+function! airline#extensions#syntastic#init(ext)
+ call airline#parts#define_function('syntastic-warn', 'airline#extensions#syntastic#get_warning')
+ call airline#parts#define_function('syntastic-err', 'airline#extensions#syntastic#get_error')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline.vim
new file mode 100644
index 0000000..10e235e
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline.vim
@@ -0,0 +1,213 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+
+let s:taboo = get(g:, 'airline#extensions#taboo#enabled', 1) && get(g:, 'loaded_taboo', 0)
+if s:taboo
+ let g:taboo_tabline = 0
+endif
+
+let s:ctrlspace = get(g:, 'CtrlSpaceLoaded', 0)
+
+function! airline#extensions#tabline#init(ext)
+ if has('gui_running')
+ set guioptions-=e
+ endif
+
+ autocmd User AirlineToggledOn call s:toggle_on()
+ autocmd User AirlineToggledOff call s:toggle_off()
+
+ call s:toggle_on()
+ call a:ext.add_theme_func('airline#extensions#tabline#load_theme')
+endfunction
+
+function! s:toggle_off()
+ call airline#extensions#tabline#autoshow#off()
+ call airline#extensions#tabline#tabs#off()
+ call airline#extensions#tabline#buffers#off()
+ if s:ctrlspace
+ call airline#extensions#tabline#ctrlspace#off()
+ endif
+endfunction
+
+function! s:toggle_on()
+ call airline#extensions#tabline#autoshow#on()
+ call airline#extensions#tabline#tabs#on()
+ call airline#extensions#tabline#buffers#on()
+ if s:ctrlspace
+ call airline#extensions#tabline#ctrlspace#on()
+ endif
+
+ set tabline=%!airline#extensions#tabline#get()
+endfunction
+
+function! s:update_tabline()
+ if get(g:, 'airline#extensions#tabline#disable_refresh', 0)
+ return
+ endif
+ let match = expand('<afile>')
+ if pumvisible()
+ return
+ elseif !get(g:, 'airline#extensions#tabline#enabled', 0)
+ return
+ " return, if buffer matches ignore pattern or is directory (netrw)
+ elseif empty(match) || airline#util#ignore_buf(match)
+ \ || isdirectory(expand("<afile>"))
+ return
+ endif
+ call airline#util#doautocmd('BufMRUChange')
+ " sometimes, the tabline is not correctly updated see #1580
+ " so force redraw here
+ if exists(":redrawtabline") == 2
+ redrawtabline
+ else
+ let &tabline = &tabline
+ endif
+endfunction
+
+function! airline#extensions#tabline#load_theme(palette)
+ if pumvisible()
+ return
+ endif
+ let colors = get(a:palette, 'tabline', {})
+ let tablabel = get(colors, 'airline_tablabel', a:palette.normal.airline_b)
+ " Theme for tabs on the left
+ let tab = get(colors, 'airline_tab', a:palette.normal.airline_b)
+ let tabsel = get(colors, 'airline_tabsel', a:palette.normal.airline_a)
+ let tabtype = get(colors, 'airline_tabtype', a:palette.visual.airline_a)
+ let tabfill = get(colors, 'airline_tabfill', a:palette.normal.airline_c)
+ let tabmod = get(colors, 'airline_tabmod', a:palette.insert.airline_a)
+ let tabhid = get(colors, 'airline_tabhid', a:palette.normal.airline_c)
+ if has_key(a:palette, 'normal_modified') && has_key(a:palette.normal_modified, 'airline_c')
+ let tabmodu = get(colors, 'airline_tabmod_unsel', a:palette.normal_modified.airline_c)
+ else
+ "Fall back to normal airline_c if modified airline_c isn't present
+ let tabmodu = get(colors, 'airline_tabmod_unsel', a:palette.normal.airline_c)
+ endif
+ call airline#highlighter#exec('airline_tablabel', tablabel)
+ call airline#highlighter#exec('airline_tab', tab)
+ call airline#highlighter#exec('airline_tabsel', tabsel)
+ call airline#highlighter#exec('airline_tabtype', tabtype)
+ call airline#highlighter#exec('airline_tabfill', tabfill)
+ call airline#highlighter#exec('airline_tabmod', tabmod)
+ call airline#highlighter#exec('airline_tabmod_unsel', tabmodu)
+ call airline#highlighter#exec('airline_tabhid', tabhid)
+
+ " Theme for tabs on the right
+ let tabsel_right = get(colors, 'airline_tabsel_right', a:palette.normal.airline_a)
+ let tab_right = get(colors, 'airline_tab_right', a:palette.inactive.airline_c)
+ let tabmod_right = get(colors, 'airline_tabmod_right', a:palette.insert.airline_a)
+ let tabhid_right = get(colors, 'airline_tabhid_right', a:palette.normal.airline_c)
+ if has_key(a:palette, 'normal_modified') && has_key(a:palette.normal_modified, 'airline_c')
+ let tabmodu_right = get(colors, 'airline_tabmod_unsel_right', a:palette.normal_modified.airline_c)
+ else
+ "Fall back to normal airline_c if modified airline_c isn't present
+ let tabmodu_right = get(colors, 'airline_tabmod_unsel_right', a:palette.normal.airline_c)
+ endif
+ call airline#highlighter#exec('airline_tab_right', tab_right)
+ call airline#highlighter#exec('airline_tabsel_right', tabsel_right)
+ call airline#highlighter#exec('airline_tabmod_right', tabmod_right)
+ call airline#highlighter#exec('airline_tabhid_right', tabhid_right)
+ call airline#highlighter#exec('airline_tabmod_unsel_right', tabmodu_right)
+endfunction
+
+let s:current_tabcnt = -1
+
+function! airline#extensions#tabline#get()
+ let show_buffers = get(g:, 'airline#extensions#tabline#show_buffers', 1)
+ let show_tabs = get(g:, 'airline#extensions#tabline#show_tabs', 1)
+
+ let curtabcnt = tabpagenr('$')
+ if curtabcnt != s:current_tabcnt
+ let s:current_tabcnt = curtabcnt
+ call airline#extensions#tabline#tabs#invalidate()
+ call airline#extensions#tabline#buffers#invalidate()
+ call airline#extensions#tabline#ctrlspace#invalidate()
+ endif
+
+ if !exists('#airline#BufAdd#*')
+ autocmd airline BufAdd * call <sid>update_tabline()
+ endif
+ if s:ctrlspace
+ return airline#extensions#tabline#ctrlspace#get()
+ elseif show_buffers && curtabcnt == 1 || !show_tabs
+ return airline#extensions#tabline#buffers#get()
+ else
+ return airline#extensions#tabline#tabs#get()
+ endif
+endfunction
+
+function! airline#extensions#tabline#title(n)
+ let title = ''
+ if s:taboo
+ let title = TabooTabTitle(a:n)
+ endif
+
+ if empty(title) && exists('*gettabvar')
+ let title = gettabvar(a:n, 'title')
+ endif
+
+ if empty(title)
+ let buflist = tabpagebuflist(a:n)
+ let winnr = tabpagewinnr(a:n)
+ let all_buffers = airline#extensions#tabline#buflist#list()
+ return airline#extensions#tabline#get_buffer_name(
+ \ buflist[winnr - 1],
+ \ filter(buflist, 'index(all_buffers, v:val) != -1'))
+ endif
+
+ return title
+endfunction
+
+function! airline#extensions#tabline#get_buffer_name(nr, ...)
+ let buffers = a:0 ? a:1 : airline#extensions#tabline#buflist#list()
+ let formatter = get(g:, 'airline#extensions#tabline#formatter', 'default')
+ return airline#extensions#tabline#formatters#{formatter}#format(a:nr, buffers)
+endfunction
+
+function! airline#extensions#tabline#new_builder()
+ let builder_context = {
+ \ 'active' : 1,
+ \ 'tabline' : 1,
+ \ 'right_sep' : get(g:, 'airline#extensions#tabline#right_sep' , g:airline_right_sep),
+ \ 'right_alt_sep' : get(g:, 'airline#extensions#tabline#right_alt_sep', g:airline_right_alt_sep),
+ \ }
+ if get(g:, 'airline_powerline_fonts', 0)
+ let builder_context.left_sep = get(g:, 'airline#extensions#tabline#left_sep' , g:airline_left_sep)
+ let builder_context.left_alt_sep = get(g:, 'airline#extensions#tabline#left_alt_sep' , g:airline_left_alt_sep)
+ else
+ let builder_context.left_sep = get(g:, 'airline#extensions#tabline#left_sep' , ' ')
+ let builder_context.left_alt_sep = get(g:, 'airline#extensions#tabline#left_alt_sep' , '|')
+ endif
+
+ return airline#extensions#tabline#builder#new(builder_context)
+endfunction
+
+function! airline#extensions#tabline#group_of_bufnr(tab_bufs, bufnr)
+ let cur = bufnr('%')
+ if cur == a:bufnr
+ if g:airline_detect_modified && getbufvar(a:bufnr, '&modified')
+ let group = 'airline_tabmod'
+ else
+ let group = 'airline_tabsel'
+ endif
+ else
+ if g:airline_detect_modified && getbufvar(a:bufnr, '&modified')
+ let group = 'airline_tabmod_unsel'
+ elseif index(a:tab_bufs, a:bufnr) > -1
+ let group = 'airline_tab'
+ else
+ let group = 'airline_tabhid'
+ endif
+ endif
+ return group
+endfunction
+
+function! airline#extensions#tabline#add_label(dict, type)
+ if get(g:, 'airline#extensions#tabline#show_tab_type', 1)
+ call a:dict.add_section_spaced('airline_tablabel',
+ \ get(g:, 'airline#extensions#tabline#'.a:type.'_label', a:type))
+ endif
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/autoshow.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/autoshow.vim
new file mode 100644
index 0000000..ac1413f
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/autoshow.vim
@@ -0,0 +1,55 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+let s:show_buffers = get(g:, 'airline#extensions#tabline#show_buffers', 1)
+let s:buf_min_count = get(g:, 'airline#extensions#tabline#buffer_min_count', 0)
+let s:tab_min_count = get(g:, 'airline#extensions#tabline#tab_min_count', 0)
+
+function! airline#extensions#tabline#autoshow#off()
+ if exists('s:original_tabline')
+ let &tabline = s:original_tabline
+ let &showtabline = s:original_showtabline
+ endif
+
+ augroup airline_tabline_autoshow
+ autocmd!
+ augroup END
+endfunction
+
+function! airline#extensions#tabline#autoshow#on()
+ let [ s:original_tabline, s:original_showtabline ] = [ &tabline, &showtabline ]
+
+ augroup airline_tabline_autoshow
+ autocmd!
+ if s:buf_min_count <= 0 && s:tab_min_count <= 1
+ if &lines > 3
+ set showtabline=2
+ endif
+ else
+ if s:show_buffers == 1
+ autocmd BufEnter * call <sid>show_tabline(s:buf_min_count, len(airline#extensions#tabline#buflist#list()))
+ autocmd BufUnload * call <sid>show_tabline(s:buf_min_count, len(airline#extensions#tabline#buflist#list()) - 1)
+ else
+ autocmd TabEnter * call <sid>show_tabline(s:tab_min_count, tabpagenr('$'))
+ endif
+ endif
+
+ " Invalidate cache. This has to come after the BufUnload for
+ " s:show_buffers, to invalidate the cache for BufEnter.
+ autocmd BufLeave,BufAdd,BufUnload * call airline#extensions#tabline#buflist#invalidate()
+ augroup END
+endfunction
+
+function! s:show_tabline(min_count, total_count)
+ if a:total_count >= a:min_count
+ if &showtabline != 2 && &lines > 3
+ set showtabline=2
+ endif
+ else
+ if &showtabline != 0
+ set showtabline=0
+ endif
+ endif
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/buffers.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/buffers.vim
new file mode 100644
index 0000000..88ebe5c
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/buffers.vim
@@ -0,0 +1,246 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+let s:spc = g:airline_symbols.space
+
+let s:current_bufnr = -1
+let s:current_modified = 0
+let s:current_tabline = ''
+let s:current_visible_buffers = []
+
+let s:number_map = {
+ \ '0': '⁰',
+ \ '1': '¹',
+ \ '2': '²',
+ \ '3': '³',
+ \ '4': '⁴',
+ \ '5': '⁵',
+ \ '6': '⁶',
+ \ '7': '⁷',
+ \ '8': '⁸',
+ \ '9': '⁹'
+ \ }
+let s:number_map = &encoding == 'utf-8'
+ \ ? get(g:, 'airline#extensions#tabline#buffer_idx_format', s:number_map)
+ \ : {}
+
+function! airline#extensions#tabline#buffers#off()
+ augroup airline_tabline_buffers
+ autocmd!
+ augroup END
+endfunction
+
+function! airline#extensions#tabline#buffers#on()
+ augroup airline_tabline_buffers
+ autocmd!
+ autocmd BufDelete * call airline#extensions#tabline#buflist#clean()
+ autocmd User BufMRUChange call airline#extensions#tabline#buflist#clean()
+ augroup END
+endfunction
+
+function! airline#extensions#tabline#buffers#invalidate()
+ let s:current_bufnr = -1
+endfunction
+
+function! airline#extensions#tabline#buffers#get()
+ try
+ call <sid>map_keys()
+ catch
+ " no-op
+ endtry
+ let cur = bufnr('%')
+ if cur == s:current_bufnr && &columns == s:column_width
+ if !g:airline_detect_modified || getbufvar(cur, '&modified') == s:current_modified
+ return s:current_tabline
+ endif
+ endif
+
+ let b = airline#extensions#tabline#new_builder()
+ let tab_bufs = tabpagebuflist(tabpagenr())
+ let show_buf_label_first = 0
+
+ if get(g:, 'airline#extensions#tabline#buf_label_first', 0)
+ let show_buf_label_first = 1
+ endif
+ if show_buf_label_first
+ call airline#extensions#tabline#add_label(b, 'buffers')
+ endif
+
+ let b.tab_bufs = tabpagebuflist(tabpagenr())
+
+ let b.overflow_group = 'airline_tabhid'
+ let b.buffers = airline#extensions#tabline#buflist#list()
+ if get(g:, 'airline#extensions#tabline#current_first', 0)
+ if index(b.buffers, cur) > -1
+ call remove(b.buffers, index(b.buffers, cur))
+ endif
+ let b.buffers = [cur] + b.buffers
+ endif
+
+ function! b.get_group(i) dict
+ let bufnum = get(self.buffers, a:i, -1)
+ if bufnum == -1
+ return ''
+ endif
+ let group = airline#extensions#tabline#group_of_bufnr(self.tab_bufs, bufnum)
+ if bufnum == bufnr('%')
+ let s:current_modified = (group == 'airline_tabmod') ? 1 : 0
+ endif
+ return group
+ endfunction
+
+ if has("tablineat")
+ function! b.get_pretitle(i) dict
+ let bufnum = get(self.buffers, a:i, -1)
+ return '%'.bufnum.'@airline#extensions#tabline#buffers#clickbuf@'
+ endfunction
+
+ function! b.get_posttitle(i) dict
+ return '%X'
+ endfunction
+ endif
+
+ function! b.get_title(i) dict
+ let bufnum = get(self.buffers, a:i, -1)
+ let group = self.get_group(a:i)
+ let pgroup = self.get_group(a:i - 1)
+ " always add a space when powerline_fonts are used
+ " or for the very first item
+ if get(g:, 'airline_powerline_fonts', 0) || a:i == 0
+ let space = s:spc
+ else
+ let space= (pgroup == group ? s:spc : '')
+ endif
+
+ if get(g:, 'airline#extensions#tabline#buffer_idx_mode', 0)
+ if len(s:number_map) > 0
+ return space. get(s:number_map, a:i+1, '') . '%(%{airline#extensions#tabline#get_buffer_name('.bufnum.')}%)' . s:spc
+ else
+ return '['.(a:i+1).s:spc.'%(%{airline#extensions#tabline#get_buffer_name('.bufnum.')}%)'.']'
+ endif
+ else
+ return space.'%(%{airline#extensions#tabline#get_buffer_name('.bufnum.')}%)'.s:spc
+ endif
+ endfunction
+
+ let current_buffer = max([index(b.buffers, cur), 0])
+ let last_buffer = len(b.buffers) - 1
+ call b.insert_titles(current_buffer, 0, last_buffer)
+
+ call b.add_section('airline_tabfill', '')
+ call b.split()
+ call b.add_section('airline_tabfill', '')
+ if !show_buf_label_first
+ call airline#extensions#tabline#add_label(b, 'buffers')
+ endif
+
+ if tabpagenr('$') > 1
+ call b.add_section_spaced('airline_tabmod', printf('%s %d/%d', "tab", tabpagenr(), tabpagenr('$')))
+ endif
+
+ let s:current_bufnr = cur
+ let s:column_width = &columns
+ let s:current_tabline = b.build()
+ let s:current_visible_buffers = copy(b.buffers)
+ if b._right_title <= last_buffer
+ call remove(s:current_visible_buffers, b._right_title, last_buffer)
+ endif
+ if b._left_title > 0
+ call remove(s:current_visible_buffers, 0, b._left_title)
+ endif
+ return s:current_tabline
+endfunction
+
+function! s:select_tab(buf_index)
+ " no-op when called in 'keymap_ignored_filetypes'
+ if count(get(g:, 'airline#extensions#tabline#keymap_ignored_filetypes',
+ \ ['vimfiler', 'nerdtree']), &ft)
+ return
+ endif
+
+ let idx = a:buf_index
+ if s:current_visible_buffers[0] == -1
+ let idx = idx + 1
+ endif
+
+ let buf = get(s:current_visible_buffers, idx, 0)
+ if buf != 0
+ exec 'b!' . buf
+ endif
+endfunction
+
+function! s:jump_to_tab(offset)
+ let l = airline#extensions#tabline#buflist#list()
+ let i = index(l, bufnr('%'))
+ if i > -1
+ exec 'b!' . l[(i + a:offset) % len(l)]
+ endif
+endfunction
+
+function! s:map_keys()
+ if get(g:, 'airline#extensions#tabline#buffer_idx_mode', 1)
+ noremap <silent> <Plug>AirlineSelectTab1 :call <SID>select_tab(0)<CR>
+ noremap <silent> <Plug>AirlineSelectTab2 :call <SID>select_tab(1)<CR>
+ noremap <silent> <Plug>AirlineSelectTab3 :call <SID>select_tab(2)<CR>
+ noremap <silent> <Plug>AirlineSelectTab4 :call <SID>select_tab(3)<CR>
+ noremap <silent> <Plug>AirlineSelectTab5 :call <SID>select_tab(4)<CR>
+ noremap <silent> <Plug>AirlineSelectTab6 :call <SID>select_tab(5)<CR>
+ noremap <silent> <Plug>AirlineSelectTab7 :call <SID>select_tab(6)<CR>
+ noremap <silent> <Plug>AirlineSelectTab8 :call <SID>select_tab(7)<CR>
+ noremap <silent> <Plug>AirlineSelectTab9 :call <SID>select_tab(8)<CR>
+ noremap <silent> <Plug>AirlineSelectPrevTab :<C-u>call <SID>jump_to_tab(-v:count1)<CR>
+ noremap <silent> <Plug>AirlineSelectNextTab :<C-u>call <SID>jump_to_tab(v:count1)<CR>
+ endif
+endfunction
+
+function! airline#extensions#tabline#buffers#clickbuf(minwid, clicks, button, modifiers) abort
+ " Clickable buffers
+ " works only in recent NeoVim with has('tablineat')
+
+ " single mouse button click without modifiers pressed
+ if a:clicks == 1 && a:modifiers !~# '[^ ]'
+ if a:button is# 'l'
+ " left button - switch to buffer
+ silent execute 'buffer' a:minwid
+ elseif a:button is# 'm'
+ " middle button - delete buffer
+
+ if get(g:, 'airline#extensions#tabline#middle_click_preserves_windows', 0) == 0 || winnr('$') == 1
+ " just simply delete the clicked buffer. This will cause windows
+ " associated with the clicked buffer to be closed.
+ silent execute 'bdelete' a:minwid
+ else
+ " find windows displaying the clicked buffer and open an new
+ " buffer in them.
+ let current_window = bufwinnr("%")
+ let window_number = bufwinnr(a:minwid)
+ let last_window_visited = -1
+
+ " Set to 1 if the clicked buffer was open in any windows.
+ let buffer_in_window = 0
+
+ " Find the next window with the clicked buffer open. If bufwinnr()
+ " returns the same window number, this is because we clicked a new
+ " buffer, and then tried editing a new buffer. Vim won't create a
+ " new empty buffer for the same window, so we get the same window
+ " number from bufwinnr(). In this case we just give up and don't
+ " delete the buffer.
+ " This could be made cleaner if we could check if the clicked buffer
+ " is a new buffer, but I don't know if there is a way to do that.
+ while window_number != -1 && window_number != last_window_visited
+ let buffer_in_window = 1
+ silent execute window_number . 'wincmd w'
+ silent execute 'enew'
+ let last_window_visited = window_number
+ let window_number = bufwinnr(a:minwid)
+ endwhile
+ silent execute current_window . 'wincmd w'
+ if window_number != last_window_visited || buffer_in_window == 0
+ silent execute 'bdelete' a:minwid
+ endif
+ endif
+ endif
+ endif
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/buflist.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/buflist.vim
new file mode 100644
index 0000000..a944cb9
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/buflist.vim
@@ -0,0 +1,77 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+function! airline#extensions#tabline#buflist#invalidate()
+ unlet! s:current_buffer_list
+endfunction
+
+function! airline#extensions#tabline#buflist#clean()
+ call airline#extensions#tabline#buflist#invalidate()
+ call airline#extensions#tabline#buffers#invalidate()
+endfunction
+
+" paths in excludes list
+function! s:ExcludePaths(nr, exclude_paths)
+ let bpath = fnamemodify(bufname(a:nr), ":p")
+ for f in a:exclude_paths
+ if bpath =~# f | return 1 | endif
+ endfor
+endfunction
+
+" other types to exclude
+function! s:ExcludeOther(nr, exclude_preview)
+ if (getbufvar(a:nr, 'current_syntax') == 'qf') ||
+ \ (a:exclude_preview && getbufvar(a:nr, '&bufhidden') == 'wipe'
+ \ && getbufvar(a:nr, '&buftype') == 'nofile')
+ return 1 | endif
+endfunction
+
+function! airline#extensions#tabline#buflist#list()
+ if exists('s:current_buffer_list')
+ return s:current_buffer_list
+ endif
+
+ let exclude_buffers = get(g:, 'airline#extensions#tabline#exclude_buffers', [])
+ let exclude_paths = get(g:, 'airline#extensions#tabline#excludes', [])
+ let exclude_preview = get(g:, 'airline#extensions#tabline#exclude_preview', 1)
+
+ let list = (exists('g:did_bufmru') && g:did_bufmru) ? BufMRUList() : range(1, bufnr("$"))
+
+ let buffers = []
+ " If this is too slow, we can switch to a different algorithm.
+ " Basically branch 535 already does it, but since it relies on
+ " BufAdd autocommand, I'd like to avoid this if possible.
+ for nr in list
+ if buflisted(nr)
+ " Do not add to the bufferlist, if either
+ " 1) bufnr is exclude_buffers list
+ " 2) buffername matches one of exclude_paths patterns
+ " 3) buffer is a quickfix buffer
+ " 4) when excluding preview windows:
+ " 'bufhidden' == wipe
+ " 'buftype' == nofile
+ " 5) ignore buffers matching airline#extensions#tabline#ignore_bufadd_pat
+
+ " check buffer numbers first
+ if index(exclude_buffers, nr) >= 0
+ continue
+ " check paths second
+ elseif !empty(exclude_paths) && s:ExcludePaths(nr, exclude_paths)
+ continue
+ " ignore buffers matching airline#extensions#tabline#ignore_bufadd_pat
+ elseif airline#util#ignore_buf(bufname(nr))
+ continue
+ " check other types last
+ elseif s:ExcludeOther(nr, exclude_preview)
+ continue
+ endif
+
+ call add(buffers, nr)
+ endif
+ endfor
+
+ let s:current_buffer_list = buffers
+ return buffers
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/builder.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/builder.vim
new file mode 100644
index 0000000..20964b1
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/builder.vim
@@ -0,0 +1,232 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+let s:prototype = {}
+
+" Set the point in the tabline where the builder should insert the titles.
+"
+" Subsequent calls will overwrite the previous ones, so only the last call
+" determines to location to insert titles.
+"
+" NOTE: The titles are not inserted until |build| is called, so that the
+" remaining contents of the tabline can be taken into account.
+"
+" Callers should define at least |get_title| and |get_group| on the host
+" object before calling |build|.
+function! s:prototype.insert_titles(current, first, last) dict
+ let self._first_title = a:first " lowest index
+ let self._last_title = a:last " highest index
+ let self._left_title = a:current " next index to add on the left
+ let self._right_title = a:current + 1 " next index to add on the right
+ let self._left_position = self.get_position() " left end of titles
+ let self._right_position = self._left_position " right end of the titles
+endfunction
+
+" Insert a title for entry number |index|, of group |group| at position |pos|,
+" if there is space for it. Returns 1 if it is inserted, 0 otherwise
+"
+" |force| inserts the title even if there isn't enough space left for it.
+" |sep_size| adjusts the size change that the title is considered to take up,
+" to account for changes to the separators
+"
+" The title is defined by |get_title| on the hosting object, called with
+" |index| as its only argument.
+" |get_pretitle| and |get_posttitle| may be defined on the host object to
+" insert some formatting before or after the title. These should be 0-width.
+"
+" This method updates |_right_position| and |_remaining_space| on the host
+" object, if the title is inserted.
+function! s:prototype.try_insert_title(index, group, pos, sep_size, force) dict
+ let title = self.get_title(a:index)
+ let title_size = s:tabline_evaluated_length(title) + a:sep_size
+ if a:force || self._remaining_space >= title_size
+ let pos = a:pos
+ if has_key(self, "get_pretitle")
+ call self.insert_raw(self.get_pretitle(a:index), pos)
+ let self._right_position += 1
+ let pos += 1
+ endif
+
+ call self.insert_section(a:group, title, pos)
+ let self._right_position += 1
+ let pos += 1
+
+ if has_key(self, "get_posttitle")
+ call self.insert_raw(self.get_posttitle(a:index), pos)
+ let self._right_position += 1
+ let pos += 1
+ endif
+
+ let self._remaining_space -= title_size
+ return 1
+ endif
+ return 0
+endfunction
+
+function! s:get_separator_change(new_group, old_group, end_group, sep_size, alt_sep_size)
+ return s:get_separator_change_with_end(a:new_group, a:old_group, a:end_group, a:end_group, a:sep_size, a:alt_sep_size)
+endfunction
+
+" Compute the change in size of the tabline caused by separators
+"
+" This should be kept up-to-date with |s:get_transitioned_seperator| and
+" |s:get_separator| in autoload/airline/builder.vim
+function! s:get_separator_change_with_end(new_group, old_group, new_end_group, old_end_group, sep_size, alt_sep_size)
+ let sep_change = 0
+ if !empty(a:new_end_group) " Separator between title and the end
+ let sep_change += airline#builder#should_change_group(a:new_group, a:new_end_group) ? a:sep_size : a:alt_sep_size
+ endif
+ if !empty(a:old_group) " Separator between the title and the one adjacent
+ let sep_change += airline#builder#should_change_group(a:new_group, a:old_group) ? a:sep_size : a:alt_sep_size
+ if !empty(a:old_end_group) " Remove mis-predicted separator
+ let sep_change -= airline#builder#should_change_group(a:old_group, a:old_end_group) ? a:sep_size : a:alt_sep_size
+ endif
+ endif
+ return sep_change
+endfunction
+
+" This replaces the build function of the |airline#builder#new| object, to
+" insert titles as specified by the last call to |insert_titles| before
+" passing to the original build function.
+"
+" Callers should define at least |get_title| and |get_group| on the host
+" object if |insert_titles| has been called on it.
+function! s:prototype.build() dict
+ if has_key(self, '_left_position') && self._first_title <= self._last_title
+ let self._remaining_space = &columns - s:tabline_evaluated_length(self._build())
+
+ let center_active = get(g:, 'airline#extensions#tabline#center_active', 0)
+
+ let sep_size = s:tabline_evaluated_length(self._context.left_sep)
+ let alt_sep_size = s:tabline_evaluated_length(self._context.left_alt_sep)
+
+ let outer_left_group = airline#builder#get_prev_group(self._sections, self._left_position)
+ let outer_right_group = airline#builder#get_next_group(self._sections, self._right_position)
+
+ let overflow_marker = get(g:, 'airline#extensions#tabline#overflow_marker', g:airline_symbols.ellipsis)
+ let overflow_marker_size = s:tabline_evaluated_length(overflow_marker)
+ " Allow space for the markers before we begin filling in titles.
+ if self._left_title > self._first_title
+ let self._remaining_space -= overflow_marker_size +
+ \ s:get_separator_change(self.overflow_group, "", outer_left_group, sep_size, alt_sep_size)
+ endif
+ if self._left_title < self._last_title
+ let self._remaining_space -= overflow_marker_size +
+ \ s:get_separator_change(self.overflow_group, "", outer_right_group, sep_size, alt_sep_size)
+ endif
+
+ " Add the current title
+ let group = self.get_group(self._left_title)
+ if self._left_title == self._first_title
+ let sep_change = s:get_separator_change(group, "", outer_left_group, sep_size, alt_sep_size)
+ else
+ let sep_change = s:get_separator_change(group, "", self.overflow_group, sep_size, alt_sep_size)
+ endif
+ if self._left_title == self._last_title
+ let sep_change += s:get_separator_change(group, "", outer_right_group, sep_size, alt_sep_size)
+ else
+ let sep_change += s:get_separator_change(group, "", self.overflow_group, sep_size, alt_sep_size)
+ endif
+ let left_group = group
+ let right_group = group
+ let self._left_title -=
+ \ self.try_insert_title(self._left_title, group, self._left_position, sep_change, 1)
+
+ if get(g:, 'airline#extensions#tabline#current_first', 0)
+ " always have current title first
+ let self._left_position += 1
+ endif
+
+ if !center_active && self._right_title <= self._last_title
+ " Add the title to the right
+ let group = self.get_group(self._right_title)
+ if self._right_title == self._last_title
+ let sep_change = s:get_separator_change_with_end(group, right_group, outer_right_group, self.overflow_group, sep_size, alt_sep_size) - overflow_marker_size
+ else
+ let sep_change = s:get_separator_change(group, right_group, self.overflow_group, sep_size, alt_sep_size)
+ endif
+ let right_group = group
+ let self._right_title +=
+ \ self.try_insert_title(self._right_title, group, self._right_position, sep_change, 1)
+ endif
+
+ while self._remaining_space > 0
+ let done = 0
+ if self._left_title >= self._first_title
+ " Insert next title to the left
+ let group = self.get_group(self._left_title)
+ if self._left_title == self._first_title
+ let sep_change = s:get_separator_change_with_end(group, left_group, outer_left_group, self.overflow_group, sep_size, alt_sep_size) - overflow_marker_size
+ else
+ let sep_change = s:get_separator_change(group, left_group, self.overflow_group, sep_size, alt_sep_size)
+ endif
+ let left_group = group
+ let done = self.try_insert_title(self._left_title, group, self._left_position, sep_change, 0)
+ let self._left_title -= done
+ endif
+ " If center_active is set, this |if| operates as an independent |if|,
+ " otherwise as an |elif|.
+ if self._right_title <= self._last_title && (center_active || !done)
+ " Insert next title to the right
+ let group = self.get_group(self._right_title)
+ if self._right_title == self._last_title
+ let sep_change = s:get_separator_change_with_end(group, right_group, outer_right_group, self.overflow_group, sep_size, alt_sep_size) - overflow_marker_size
+ else
+ let sep_change = s:get_separator_change(group, right_group, self.overflow_group, sep_size, alt_sep_size)
+ endif
+ let right_group = group
+ let done = self.try_insert_title(self._right_title, group, self._right_position, sep_change, 0)
+ let self._right_title += done
+ endif
+ if !done
+ break
+ endif
+ endwhile
+
+ if self._left_title >= self._first_title
+ if get(g:, 'airline#extensions#tabline#current_first', 0)
+ let self._left_position -= 1
+ endif
+ call self.insert_section(self.overflow_group, overflow_marker, self._left_position)
+ let self._right_position += 1
+ endif
+
+ if self._right_title <= self._last_title
+ call self.insert_section(self.overflow_group, overflow_marker, self._right_position)
+ endif
+ endif
+
+ return self._build()
+endfunction
+
+let s:prototype.overflow_group = 'airline_tab'
+
+" Extract the text content a tabline will render. (Incomplete).
+"
+" See :help 'statusline' for the list of fields.
+function! s:evaluate_tabline(tabline)
+ let tabline = a:tabline
+ let tabline = substitute(tabline, '%{\([^}]\+\)}', '\=eval(submatch(1))', 'g')
+ let tabline = substitute(tabline, '%#[^#]\+#', '', 'g')
+ let tabline = substitute(tabline, '%(\([^)]\+\)%)', '\1', 'g')
+ let tabline = substitute(tabline, '%\d\+[TX]', '', 'g')
+ let tabline = substitute(tabline, '%=', '', 'g')
+ let tabline = substitute(tabline, '%\d*\*', '', 'g')
+ if has('tablineat')
+ let tabline = substitute(tabline, '%@[^@]\+@', '', 'g')
+ endif
+ return tabline
+endfunction
+
+function! s:tabline_evaluated_length(tabline)
+ return airline#util#strchars(s:evaluate_tabline(a:tabline))
+endfunction
+
+function! airline#extensions#tabline#builder#new(context)
+ let builder = airline#builder#new(a:context)
+ let builder._build = builder.build
+ call extend(builder, s:prototype, 'force')
+ return builder
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/ctrlspace.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/ctrlspace.vim
new file mode 100644
index 0000000..bb2d518
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/ctrlspace.vim
@@ -0,0 +1,157 @@
+" MIT License. Copyright (c) 2016-2018 Kevin Sapper et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+let s:current_bufnr = -1
+let s:current_modified = 0
+let s:current_tabnr = -1
+let s:current_tabline = ''
+let s:highlight_groups = ['hid', 0, '', 'sel', 'mod_unsel', 0, 'mod_unsel', 'mod']
+
+function! airline#extensions#tabline#ctrlspace#off()
+ augroup airline_tabline_ctrlspace
+ autocmd!
+ augroup END
+endfunction
+
+function! airline#extensions#tabline#ctrlspace#on()
+ augroup airline_tabline_ctrlspace
+ autocmd!
+ autocmd BufDelete * call airline#extensions#tabline#ctrlspace#invalidate()
+ augroup END
+endfunction
+
+function! airline#extensions#tabline#ctrlspace#invalidate()
+ let s:current_bufnr = -1
+ let s:current_tabnr = -1
+endfunction
+
+function! airline#extensions#tabline#ctrlspace#add_buffer_section(builder, cur_tab, cur_buf, pull_right)
+ let pos_extension = (a:pull_right ? '_right' : '')
+ let buffer_list = ctrlspace#api#BufferList(a:cur_tab)
+
+ " add by tenfy(tenfyzhong@qq.com)
+ " if the current buffer no in the buffer list
+ " return false and no redraw tabline.
+ " Fixes #1515. if there a BufEnter autocmd execute redraw. The tabline may no update.
+ let bufnr_list = map(copy(buffer_list), 'v:val["index"]')
+ if index(bufnr_list, a:cur_buf) == -1 && a:cur_tab == s:current_tabnr
+ return 0
+ endif
+
+ let s:current_modified = getbufvar(a:cur_buf, '&modified')
+
+ for buffer in buffer_list
+ let group = 'airline_tab'
+ \ .s:highlight_groups[(4 * buffer.modified) + (2 * buffer.visible) + (a:cur_buf == buffer.index)]
+ \ .pos_extension
+
+ let buf_name = '%(%{airline#extensions#tabline#get_buffer_name('.buffer.index.')}%)'
+
+ if has("tablineat")
+ let buf_name = '%'.buffer.index.'@airline#extensions#tabline#buffers#clickbuf@'.buf_name.'%X'
+ endif
+
+ call a:builder.add_section_spaced(group, buf_name)
+ endfor
+
+ " add by tenfy(tenfyzhong@qq.com)
+ " if the selected buffer was updated
+ " return true
+ return 1
+endfunction
+
+function! airline#extensions#tabline#ctrlspace#add_tab_section(builder, pull_right)
+ let pos_extension = (a:pull_right ? '_right' : '')
+ let tab_list = ctrlspace#api#TabList()
+
+ for tab in tab_list
+ let group = 'airline_tab'
+ \ .s:highlight_groups[(4 * tab.modified) + (3 * tab.current)]
+ \ .pos_extension
+
+ if get(g:, 'airline#extensions#tabline#ctrlspace_show_tab_nr', 0) == 0
+ call a:builder.add_section_spaced(group, '%'.tab.index.'T'.tab.title.ctrlspace#api#TabBuffersNumber(tab.index).'%T')
+ else
+ call a:builder.add_section_spaced(group, '%'.(tab.index).'T'.(tab.index).(g:airline_symbols.space).(tab.title).ctrlspace#api#TabBuffersNumber(tab.index).'%T')
+ endif
+ endfor
+endfunction
+
+function! airline#extensions#tabline#ctrlspace#get()
+ let cur_buf = bufnr('%')
+ let buffer_label = get(g:, 'airline#extensions#tabline#buffers_label', 'buffers')
+ let tab_label = get(g:, 'airline#extensions#tabline#tabs_label', 'tabs')
+ let switch_buffers_and_tabs = get(g:, 'airline#extensions#tabline#switch_buffers_and_tabs', 0)
+
+ try
+ call airline#extensions#tabline#tabs#map_keys()
+ endtry
+
+ let cur_tab = tabpagenr()
+
+ if cur_buf == s:current_bufnr && cur_tab == s:current_tabnr
+ if !g:airline_detect_modified || getbufvar(cur_buf, '&modified') == s:current_modified
+ return s:current_tabline
+ endif
+ endif
+
+ let builder = airline#extensions#tabline#new_builder()
+
+ let show_buffers = get(g:, 'airline#extensions#tabline#show_buffers', 1)
+ let show_tabs = get(g:, 'airline#extensions#tabline#show_tabs', 1)
+
+ let AppendBuffers = function('airline#extensions#tabline#ctrlspace#add_buffer_section', [builder, cur_tab, cur_buf])
+ let AppendTabs = function('airline#extensions#tabline#ctrlspace#add_tab_section', [builder])
+ let AppendLabel = function(builder.add_section_spaced, ['airline_tabtype'], builder)
+
+ " <= 1: |{Tabs} <tab|
+ " == 2: |{Buffers} <buffers|
+ " == 3: |buffers> {Buffers} {Tabs} <tabs|
+ let showing_mode = (2 * show_buffers) + (show_tabs)
+ let ignore_update = 0
+
+ " Add left tabline content
+ if showing_mode <= 1 " Tabs only mode
+ call AppendTabs(0)
+ elseif showing_mode == 2 " Buffers only mode
+ let ignore_update = !AppendBuffers(0)
+ else
+ if !switch_buffers_and_tabs
+ call AppendLabel(buffer_label)
+ let ignore_update = !AppendBuffers(0)
+ else
+ call AppendLabel(tab_label)
+ call AppendTabs(0)
+ endif
+ endif
+
+ if ignore_update | return s:current_tabline | endif
+
+ call builder.add_section('airline_tabfill', '')
+ call builder.split()
+ call builder.add_section('airline_tabfill', '')
+
+ " Add right tabline content
+ if showing_mode <= 1 " Tabs only mode
+ call AppendLabel(tab_label)
+ elseif showing_mode == 2 " Buffers only mode
+ call AppendLabel(buffer_label)
+ else
+ if !switch_buffers_and_tabs
+ call AppendTabs(1)
+ call AppendLabel(tab_label)
+ else
+ let ignore_update = AppendBuffers(1)
+ call AppendLabel(buffer_label)
+ endif
+ endif
+
+ if ignore_update | return s:current_tabline | endif
+
+ let s:current_bufnr = cur_buf
+ let s:current_tabnr = cur_tab
+ let s:current_tabline = builder.build()
+ return s:current_tabline
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/default.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/default.vim
new file mode 100644
index 0000000..c98d7ef
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/default.vim
@@ -0,0 +1,43 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+let s:fnamecollapse = get(g:, 'airline#extensions#tabline#fnamecollapse', 1)
+let s:fnametruncate = get(g:, 'airline#extensions#tabline#fnametruncate', 0)
+let s:buf_nr_format = get(g:, 'airline#extensions#tabline#buffer_nr_format', '%s: ')
+let s:buf_nr_show = get(g:, 'airline#extensions#tabline#buffer_nr_show', 0)
+let s:buf_modified_symbol = g:airline_symbols.modified
+
+function! airline#extensions#tabline#formatters#default#format(bufnr, buffers)
+ let fmod = get(g:, 'airline#extensions#tabline#fnamemod', ':~:.')
+ let _ = ''
+
+ let name = bufname(a:bufnr)
+ if empty(name)
+ let _ .= '[No Name]'
+ else
+ if s:fnamecollapse
+ " Does not handle non-ascii characters like Cyrillic: 'D/Учёба/t.c'
+ "let _ .= substitute(fnamemodify(name, fmod), '\v\w\zs.{-}\ze(\\|/)', '', 'g')
+ let _ .= pathshorten(fnamemodify(name, fmod))
+ else
+ let _ .= fnamemodify(name, fmod)
+ endif
+ if a:bufnr != bufnr('%') && s:fnametruncate && strlen(_) > s:fnametruncate
+ let _ = strpart(_, 0, s:fnametruncate)
+ endif
+ endif
+
+ return airline#extensions#tabline#formatters#default#wrap_name(a:bufnr, _)
+endfunction
+
+function! airline#extensions#tabline#formatters#default#wrap_name(bufnr, buffer_name)
+ let _ = s:buf_nr_show ? printf(s:buf_nr_format, a:bufnr) : ''
+ let _ .= substitute(a:buffer_name, '\\', '/', 'g')
+
+ if getbufvar(a:bufnr, '&modified') == 1
+ let _ .= s:buf_modified_symbol
+ endif
+ return _
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/jsformatter.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/jsformatter.vim
new file mode 100644
index 0000000..b16d06f
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/jsformatter.vim
@@ -0,0 +1,15 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+function! airline#extensions#tabline#formatters#jsformatter#format(bufnr, buffers)
+ let buf = bufname(a:bufnr)
+ let filename = fnamemodify(buf, ':t')
+
+ if filename == 'index.js' || filename == 'index.jsx' || filename == 'index.ts' || filename == 'index.tsx'
+ return fnamemodify(buf, ':p:h:t') . '/i'
+ else
+ return airline#extensions#tabline#formatters#unique_tail_improved#format(a:bufnr, a:buffers)
+ endif
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/tabnr.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/tabnr.vim
new file mode 100644
index 0000000..fa71014
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/tabnr.vim
@@ -0,0 +1,14 @@
+" MIT License. Copyright (c) 2017-2018 C.Brabandt et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+function! airline#extensions#tabline#formatters#tabnr#format(tab_nr_type, nr)
+ if a:tab_nr_type == 0 " nr of splits
+ return (g:airline_symbols.space).'%{len(tabpagebuflist('.a:nr.'))}'
+ elseif a:tab_nr_type == 1 " tab number
+ return (g:airline_symbols.space).a:nr
+ else "== 2 splits and tab number
+ return (g:airline_symbols.space).a:nr.'.%{len(tabpagebuflist('.a:nr.'))}'
+ endif
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/unique_tail.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/unique_tail.vim
new file mode 100644
index 0000000..3e61b60
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/unique_tail.vim
@@ -0,0 +1,41 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+function! airline#extensions#tabline#formatters#unique_tail#format(bufnr, buffers)
+ let duplicates = {}
+ let tails = {}
+ let map = {}
+ for nr in a:buffers
+ let name = bufname(nr)
+ if empty(name)
+ let map[nr] = '[No Name]'
+ else
+ let tail = fnamemodify(name, ':s?/\+$??:t')
+ if has_key(tails, tail)
+ let duplicates[nr] = nr
+ endif
+ let tails[tail] = 1
+ let map[nr] = airline#extensions#tabline#formatters#default#wrap_name(nr, tail)
+ endif
+ endfor
+
+ let fmod = get(g:, 'airline#extensions#tabline#fnamemod', ':p:.')
+ for nr in values(duplicates)
+ let name = bufname(nr)
+ let fnamecollapse = get(g:, 'airline#extensions#tabline#fnamecollapse', 1)
+ if fnamecollapse
+ let map[nr] = airline#extensions#tabline#formatters#default#wrap_name(nr, substitute(fnamemodify(name, fmod), '\v\w\zs.{-}\ze(\\|/)', '', 'g'))
+ else
+ let map[nr] = airline#extensions#tabline#formatters#default#wrap_name(nr, fnamemodify(name, fmod))
+ endif
+ endfor
+
+ if has_key(map, a:bufnr)
+ return map[a:bufnr]
+ endif
+
+ " if we get here, the buffer list isn't in sync with the selected buffer yet, fall back to the default
+ return airline#extensions#tabline#formatters#default#format(a:bufnr, a:buffers)
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/unique_tail_improved.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/unique_tail_improved.vim
new file mode 100644
index 0000000..c48174b
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/formatters/unique_tail_improved.vim
@@ -0,0 +1,91 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+let s:skip_symbol = '…'
+
+function! airline#extensions#tabline#formatters#unique_tail_improved#format(bufnr, buffers)
+ if len(a:buffers) <= 1 " don't need to compare bufnames if has less than one buffer opened
+ return airline#extensions#tabline#formatters#default#format(a:bufnr, a:buffers)
+ endif
+
+ let curbuf_tail = fnamemodify(bufname(a:bufnr), ':t')
+ let do_deduplicate = 0
+ let path_tokens = {}
+
+ for nr in a:buffers
+ let name = bufname(nr)
+ if !empty(name) && nr != a:bufnr && fnamemodify(name, ':t') == curbuf_tail " only perform actions if curbuf_tail isn't unique
+ let do_deduplicate = 1
+ let tokens = reverse(split(substitute(fnamemodify(name, ':p:h'), '\\', '/', 'g'), '/'))
+ let token_index = 0
+ for token in tokens
+ if token == '' | continue | endif
+ if token == '.' | break | endif
+ if !has_key(path_tokens, token_index)
+ let path_tokens[token_index] = {}
+ endif
+ let path_tokens[token_index][token] = 1
+ let token_index += 1
+ endfor
+ endif
+ endfor
+
+ if do_deduplicate == 1
+ let path = []
+ let token_index = 0
+ for token in reverse(split(substitute(fnamemodify(bufname(a:bufnr), ':p:h'), '\\', '/', 'g'), '/'))
+ if token == '.' | break | endif
+ let duplicated = 0
+ let uniq = 1
+ let single = 1
+ if has_key(path_tokens, token_index)
+ let duplicated = 1
+ if len(keys(path_tokens[token_index])) > 1 | let single = 0 | endif
+ if has_key(path_tokens[token_index], token) | let uniq = 0 | endif
+ endif
+ call insert(path, {'token': token, 'duplicated': duplicated, 'uniq': uniq, 'single': single})
+ let token_index += 1
+ endfor
+
+ let buf_name = [curbuf_tail]
+ let has_uniq = 0
+ let has_skipped = 0
+ for token1 in reverse(path)
+ if !token1['duplicated'] && len(buf_name) > 1
+ call insert(buf_name, s:skip_symbol)
+ let has_skipped = 0
+ break
+ endif
+
+ if has_uniq == 1
+ call insert(buf_name, s:skip_symbol)
+ let has_skipped = 0
+ break
+ endif
+
+ if token1['uniq'] == 0 && token1['single'] == 1
+ let has_skipped = 1
+ else
+ if has_skipped == 1
+ call insert(buf_name, s:skip_symbol)
+ let has_skipped = 0
+ endif
+ call insert(buf_name, token1['token'])
+ endif
+
+ if token1['uniq'] == 1
+ let has_uniq = 1
+ endif
+ endfor
+
+ if has_skipped == 1
+ call insert(buf_name, s:skip_symbol)
+ endif
+
+ return airline#extensions#tabline#formatters#default#wrap_name(a:bufnr, join(buf_name, '/'))
+ else
+ return airline#extensions#tabline#formatters#default#format(a:bufnr, a:buffers)
+ endif
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/tabs.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/tabs.vim
new file mode 100644
index 0000000..a74ab5b
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/tabs.vim
@@ -0,0 +1,124 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+let s:spc = g:airline_symbols.space
+let s:current_bufnr = -1
+let s:current_tabnr = -1
+let s:current_modified = 0
+
+function! airline#extensions#tabline#tabs#off()
+ augroup airline_tabline_tabs
+ autocmd!
+ augroup END
+endfunction
+
+function! airline#extensions#tabline#tabs#on()
+ augroup airline_tabline_tabs
+ autocmd!
+ autocmd BufDelete * call airline#extensions#tabline#tabs#invalidate()
+ augroup END
+endfunction
+
+function! airline#extensions#tabline#tabs#invalidate()
+ let s:current_bufnr = -1
+endfunction
+
+function! airline#extensions#tabline#tabs#get()
+ let curbuf = bufnr('%')
+ let curtab = tabpagenr()
+ try
+ call airline#extensions#tabline#tabs#map_keys()
+ catch
+ " no-op
+ endtry
+ if curbuf == s:current_bufnr && curtab == s:current_tabnr && &columns == s:column_width
+ if !g:airline_detect_modified || getbufvar(curbuf, '&modified') == s:current_modified
+ return s:current_tabline
+ endif
+ endif
+
+ let b = airline#extensions#tabline#new_builder()
+
+ call airline#extensions#tabline#add_label(b, 'tabs')
+
+ function! b.get_group(i) dict
+ let curtab = tabpagenr()
+ let group = 'airline_tab'
+ if a:i == curtab
+ let group = 'airline_tabsel'
+ if g:airline_detect_modified
+ for bi in tabpagebuflist(curtab)
+ if getbufvar(bi, '&modified')
+ let group = 'airline_tabmod'
+ endif
+ endfor
+ endif
+ let s:current_modified = (group == 'airline_tabmod') ? 1 : 0
+ endif
+ return group
+ endfunction
+
+ function! b.get_title(i) dict
+ let val = '%('
+
+ if get(g:, 'airline#extensions#tabline#show_tab_nr', 1)
+ let tab_nr_type = get(g:, 'airline#extensions#tabline#tab_nr_type', 0)
+ let val .= airline#extensions#tabline#tabs#tabnr_formatter(tab_nr_type, a:i)
+ endif
+
+ return val.'%'.a:i.'T %{airline#extensions#tabline#title('.a:i.')} %)'
+ endfunction
+
+ call b.insert_titles(curtab, 1, tabpagenr('$'))
+
+ call b.add_section('airline_tabfill', '')
+ call b.split()
+ call b.add_section('airline_tabfill', '')
+
+ if get(g:, 'airline#extensions#tabline#show_close_button', 1)
+ call b.add_section('airline_tab_right', ' %999X'.
+ \ get(g:, 'airline#extensions#tabline#close_symbol', 'X').' ')
+ endif
+
+ if get(g:, 'airline#extensions#tabline#show_splits', 1) == 1
+ let buffers = tabpagebuflist(curtab)
+ for nr in buffers
+ let group = airline#extensions#tabline#group_of_bufnr(buffers, nr) . "_right"
+ call b.add_section_spaced(group, '%(%{airline#extensions#tabline#get_buffer_name('.nr.')}%)')
+ endfor
+ if get(g:, 'airline#extensions#tabline#show_buffers', 1)
+ call airline#extensions#tabline#add_label(b, 'buffers')
+ endif
+ endif
+
+ let s:current_bufnr = curbuf
+ let s:current_tabnr = curtab
+ let s:column_width = &columns
+ let s:current_tabline = b.build()
+ return s:current_tabline
+endfunction
+
+function! airline#extensions#tabline#tabs#map_keys()
+ if maparg('<Plug>AirlineSelectTab1', 'n') is# ':1tabn<CR>'
+ return
+ endif
+ noremap <silent> <Plug>AirlineSelectTab1 :1tabn<CR>
+ noremap <silent> <Plug>AirlineSelectTab2 :2tabn<CR>
+ noremap <silent> <Plug>AirlineSelectTab3 :3tabn<CR>
+ noremap <silent> <Plug>AirlineSelectTab4 :4tabn<CR>
+ noremap <silent> <Plug>AirlineSelectTab5 :5tabn<CR>
+ noremap <silent> <Plug>AirlineSelectTab6 :6tabn<CR>
+ noremap <silent> <Plug>AirlineSelectTab7 :7tabn<CR>
+ noremap <silent> <Plug>AirlineSelectTab8 :8tabn<CR>
+ noremap <silent> <Plug>AirlineSelectTab9 :9tabn<CR>
+ noremap <silent> <Plug>AirlineSelectPrevTab gT
+ " tabn {count} goes to count tab does not go {count} tab pages forward!
+ noremap <silent> <Plug>AirlineSelectNextTab :<C-U>exe repeat(':tabn\|', v:count1)<cr>
+endfunction
+
+function! airline#extensions#tabline#tabs#tabnr_formatter(nr, i)
+ let formatter = get(g:, 'airline#extensions#tabline#tabnr_formatter', 'tabnr')
+ return airline#extensions#tabline#formatters#{formatter}#format(a:nr, a:i)
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/xtabline.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/xtabline.vim
new file mode 100644
index 0000000..4d1cdec
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tabline/xtabline.vim
@@ -0,0 +1,397 @@
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" xTabline - Reduced version for vim-airline
+" Copyright (C) 2018 Gianmaria Bajo <mg1979.git@gmail.com>
+" License: MIT License
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+
+function! airline#extensions#tabline#xtabline#init()
+
+ let s:state = 0
+
+ " initialize mappings
+ call airline#extensions#tabline#xtabline#maps()
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+ " Variables
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ let g:loaded_xtabline = 1
+ let s:most_recent = -1
+ let s:xtabline_filtering = 1
+
+ let t:xtl_excluded = get(g:, 'airline#extensions#tabline#exclude_buffers', [])
+ let t:xtl_accepted = []
+
+ let g:xtabline_include_previews = get(g:, 'xtabline_include_previews', 1)
+
+ let g:xtabline_alt_action = get(g:, 'xtabline_alt_action', "buffer #")
+
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+ " Autocommands
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ augroup plugin-xtabline
+ autocmd!
+
+ autocmd TabNew * call s:Do('new')
+ autocmd TabEnter * call s:Do('enter')
+ autocmd TabLeave * call s:Do('leave')
+ autocmd TabClosed * call s:Do('close')
+
+ autocmd BufEnter * let g:xtabline_changing_buffer = 0
+ autocmd BufAdd,BufDelete,BufWrite * call airline#extensions#tabline#xtabline#filter_buffers()
+ augroup END
+
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+ " Commands
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ com! XTabReopen call airline#extensions#tabline#xtabline#reopen_last_tab()
+
+endfunction
+
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Mappings
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#maps()
+
+ if !exists('g:xtabline_disable_keybindings')
+
+ fun! s:mapkeys(keys, plug)
+ if empty(mapcheck(a:keys)) && !hasmapto(a:plug)
+ silent! execute 'nmap <unique> '.a:keys.' '.a:plug
+ endif
+ endfun
+
+ call s:mapkeys('<F5>','<Plug>XTablineToggleTabs')
+ call s:mapkeys('<leader><F5>','<Plug>XTablineToggleFiltering')
+ call s:mapkeys('<BS>','<Plug>XTablineSelectBuffer')
+ call s:mapkeys(']l','<Plug>XTablineNextBuffer')
+ call s:mapkeys('[l','<Plug>XTablinePrevBuffer')
+ call s:mapkeys('<leader>tr','<Plug>XTablineReopen')
+ endif
+
+ nnoremap <unique> <script> <Plug>XTablineToggleTabs <SID>ToggleTabs
+ nnoremap <silent> <SID>ToggleTabs :call airline#extensions#tabline#xtabline#toggle_tabs()<cr>
+
+ nnoremap <unique> <script> <Plug>XTablineToggleFiltering <SID>ToggleFiltering
+ nnoremap <silent> <SID>ToggleFiltering :call airline#extensions#tabline#xtabline#toggle_buffers()<cr>
+
+ nnoremap <unique> <script> <Plug>XTablineSelectBuffer <SID>SelectBuffer
+ nnoremap <silent> <expr> <SID>SelectBuffer g:xtabline_changing_buffer ? "\<C-c>" : ":<C-u>call airline#extensions#tabline#xtabline#select_buffer(v:count)\<cr>"
+
+ nnoremap <unique> <script> <Plug>XTablineNextBuffer <SID>NextBuffer
+ nnoremap <silent> <expr> <SID>NextBuffer airline#extensions#tabline#xtabline#next_buffer(v:count1)
+
+ nnoremap <unique> <script> <Plug>XTablinePrevBuffer <SID>PrevBuffer
+ nnoremap <silent> <expr> <SID>PrevBuffer airline#extensions#tabline#xtabline#prev_buffer(v:count1)
+
+ nnoremap <unique> <script> <Plug>XTablineReopen <SID>ReopenLastTab
+ nnoremap <silent> <SID>ReopenLastTab :XTabReopen<cr>
+
+ if get(g:, 'xtabline_cd_commands', 0)
+ map <unique> <leader>cdc <Plug>XTablineCdCurrent
+ map <unique> <leader>cdd <Plug>XTablineCdDown1
+ map <unique> <leader>cd2 <Plug>XTablineCdDown2
+ map <unique> <leader>cd3 <Plug>XTablineCdDown3
+ map <unique> <leader>cdh <Plug>XTablineCdHome
+ nnoremap <unique> <script> <Plug>XTablineCdCurrent :cd %:p:h<cr>:call airline#util#doautocmd('BufAdd')<cr>:pwd<cr>
+ nnoremap <unique> <script> <Plug>XTablineCdDown1 :cd %:p:h:h<cr>:call airline#util#doautocmd('BufAdd')<cr>:pwd<cr>
+ nnoremap <unique> <script> <Plug>XTablineCdDown2 :cd %:p:h:h:h<cr>:call airline#util#doautocmd('BufAdd')<cr>:pwd<cr>
+ nnoremap <unique> <script> <Plug>XTablineCdDown3 :cd %:p:h:h:h:h<cr>:call airline#util#doautocmd('BufAdd')<cr>:pwd<cr>
+ nnoremap <unique> <script> <Plug>XTablineCdHome :cd ~<cr>:call airline#util#doautocmd('BufAdd')<cr>:pwd<cr>
+ endif
+endfunction
+
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Commands functions
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#toggle_tabs()
+ """Toggle between tabs/buffers tabline."""
+
+ if tabpagenr("$") == 1 | call airline#util#warning("There is only one tab.") | return | endif
+
+ if g:airline#extensions#tabline#show_tabs
+ let g:airline#extensions#tabline#show_tabs = 0
+ call airline#util#warning("Showing buffers")
+ else
+ let g:airline#extensions#tabline#show_tabs = 1
+ call airline#util#warning("Showing tabs")
+ endif
+
+ doautocmd BufAdd
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#toggle_buffers()
+ """Toggle buffer filtering in the tabline."""
+
+ if s:xtabline_filtering
+ let s:xtabline_filtering = 0
+ let g:airline#extensions#tabline#exclude_buffers = []
+ call airline#util#warning("Buffer filtering turned off")
+ doautocmd BufAdd
+ else
+ let s:xtabline_filtering = 1
+ call airline#extensions#tabline#xtabline#filter_buffers()
+ call airline#util#warning("Buffer filtering turned on")
+ doautocmd BufAdd
+ endif
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#reopen_last_tab()
+ """Reopen the last closed tab."""
+
+ if !exists('s:most_recently_closed_tab')
+ call airline#util#warning("No recent tabs.")
+ return
+ endif
+
+ let tab = s:most_recently_closed_tab
+ tabnew
+ let empty = bufnr("%")
+ let t:cwd = tab['cwd']
+ cd `=t:cwd`
+ let t:name = tab['name']
+ for buf in tab['buffers'] | execute "badd ".buf | endfor
+ execute "edit ".tab['buffers'][0]
+ execute "bdelete ".empty
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#filter_buffers()
+ """Filter buffers so that only the ones within the tab's cwd will show up.
+
+ " 'accepted' is a list of buffer numbers, for quick access.
+ " 'excluded' is a list of buffer numbers, it will be used by Airline to hide buffers.
+
+ if !s:xtabline_filtering | return | endif
+
+ let g:airline#extensions#tabline#exclude_buffers = []
+ let t:xtl_excluded = g:airline#extensions#tabline#exclude_buffers
+ let t:xtl_accepted = [] | let accepted = t:xtl_accepted
+ let previews = g:xtabline_include_previews
+
+ " bufnr(0) is the alternate buffer
+ for buf in range(1, bufnr("$"))
+
+ if !buflisted(buf) | continue | endif
+
+ " get the path
+ let path = expand("#".buf.":p")
+
+ " confront with the cwd
+ if !previews && path =~ "^".getcwd()
+ call add(accepted, buf)
+ elseif previews && path =~ getcwd()
+ call add(accepted, buf)
+ else
+ call add(t:xtl_excluded, buf)
+ endif
+ endfor
+
+ call s:RefreshTabline()
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#next_buffer(nr)
+ """Switch to next visible buffer."""
+
+ if ( s:NotEnoughBuffers() || !s:xtabline_filtering ) | return | endif
+ let accepted = t:xtl_accepted
+
+ let ix = index(accepted, bufnr("%"))
+ let target = ix + a:nr
+ let total = len(accepted)
+
+ if ix == -1
+ " not in index, go back to most recent or back to first
+ if s:most_recent == -1 || s:most_recent >= total
+ let s:most_recent = 0
+ endif
+
+ elseif target >= total
+ " over last buffer
+ while target >= total | let target -= total | endwhile
+ let s:most_recent = target
+
+ else
+ let s:most_recent = target
+ endif
+
+ return ":buffer " . accepted[s:most_recent] . "\<cr>"
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#prev_buffer(nr)
+ """Switch to previous visible buffer."""
+
+ if ( s:NotEnoughBuffers() || !s:xtabline_filtering ) | return | endif
+ let accepted = t:xtl_accepted
+
+ let ix = index(accepted, bufnr("%"))
+ let target = ix - a:nr
+ let total = len(accepted)
+
+ if ix == -1
+ " not in index, go back to most recent or back to first
+ if s:most_recent == -1 || s:most_recent >= total
+ let s:most_recent = 0
+ endif
+
+ elseif target < 0
+ " before first buffer
+ while target < 0 | let target += total | endwhile
+ let s:most_recent = target
+
+ else
+ let s:most_recent = target
+ endif
+
+ return ":buffer " . accepted[s:most_recent] . "\<cr>"
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#select_buffer(nr)
+ """Switch to visible buffer in the tabline with [count]."""
+
+ if ( a:nr == 0 || !s:xtabline_filtering ) | execute g:xtabline_alt_action | return | endif
+ let accepted = t:xtl_accepted
+
+ if (a:nr > len(accepted)) || s:NotEnoughBuffers() || accepted[a:nr - 1] == bufnr("%")
+ return
+ else
+ let g:xtabline_changing_buffer = 1
+ execute "buffer ".accepted[a:nr - 1]
+ endif
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! s:TabBuffers()
+ """Return a list of buffers names for this tab."""
+
+ return map(copy(t:xtl_accepted), 'bufname(v:val)')
+endfunction
+
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" Helper functions
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! s:NotEnoughBuffers()
+ """Just return if there aren't enough buffers."""
+
+ if len(t:xtl_accepted) < 2
+ if index(t:xtl_accepted, bufnr("%")) == -1
+ return
+ elseif !len(t:xtl_accepted)
+ call airline#util#warning("No available buffers for this tab.")
+ else
+ call airline#util#warning("No other available buffers for this tab.")
+ endif
+ return 1
+ endif
+endfunction
+
+function! s:RefreshTabline()
+ call airline#extensions#tabline#buflist#invalidate()
+endfunction
+
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+" TabPageCd
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+" tabpagecd - Turn :cd into :tabpagecd, to use one tab page per project
+" expanded version by mg979
+" Copyright (C) 2012-2013 Kana Natsuno <http://whileimautomaton.net/>
+" Copyright (C) 2018 Gianmaria Bajo <mg1979.git@gmail.com>
+" License: MIT License
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! s:InitCwds()
+ if !exists('g:xtab_cwds') | let g:xtab_cwds = [] | endif
+
+ while len(g:xtab_cwds) < tabpagenr("$")
+ call add(g:xtab_cwds, getcwd())
+ endwhile
+ let s:state = 1
+ let t:cwd = getcwd()
+ let s:last_tab = 0
+ call airline#extensions#tabline#xtabline#filter_buffers()
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! airline#extensions#tabline#xtabline#update_obsession()
+ let string = 'let g:xtab_cwds = '.string(g:xtab_cwds).' | call airline#extensions#tabline#xtabline#update_obsession()'
+ if !exists('g:obsession_append')
+ let g:obsession_append = [string]
+ else
+ call filter(g:obsession_append, 'v:val !~# "^let g:xtab_cwds"')
+ call add(g:obsession_append, string)
+ endif
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+function! s:Do(action)
+ let arg = a:action
+ if !s:state | call s:InitCwds() | return | endif
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ if arg == 'new'
+
+ call insert(g:xtab_cwds, getcwd(), tabpagenr()-1)
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ elseif arg == 'enter'
+
+ let t:cwd =g:xtab_cwds[tabpagenr()-1]
+
+ cd `=t:cwd`
+ call airline#extensions#tabline#xtabline#filter_buffers()
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ elseif arg == 'leave'
+
+ let t:cwd = getcwd()
+ let g:xtab_cwds[tabpagenr()-1] = t:cwd
+ let s:last_tab = tabpagenr() - 1
+
+ if !exists('t:name') | let t:name = t:cwd | endif
+ let s:most_recent_tab = {'cwd': t:cwd, 'name': t:name, 'buffers': s:TabBuffers()}
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ elseif arg == 'close'
+
+ let s:most_recently_closed_tab = copy(s:most_recent_tab)
+ call remove(g:xtab_cwds, s:last_tab)
+ endif
+
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ call airline#extensions#tabline#xtabline#update_obsession()
+endfunction
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tagbar.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tagbar.vim
new file mode 100644
index 0000000..5db53ee
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tagbar.vim
@@ -0,0 +1,58 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !exists(':TagbarToggle')
+ finish
+endif
+
+let s:flags = get(g:, 'airline#extensions#tagbar#flags', '')
+let s:spc = g:airline_symbols.space
+let s:init=0
+
+" Arguments: current, sort, fname
+function! airline#extensions#tagbar#get_status(...)
+ let builder = airline#builder#new({ 'active': a:1 })
+ call builder.add_section('airline_a', s:spc.'Tagbar'.s:spc)
+ call builder.add_section('airline_b', s:spc.a:2.s:spc)
+ call builder.add_section('airline_c', s:spc.a:3.s:spc)
+ return builder.build()
+endfunction
+
+function! airline#extensions#tagbar#inactive_apply(...)
+ if getwinvar(a:2.winnr, '&filetype') == 'tagbar'
+ return -1
+ endif
+endfunction
+
+let s:airline_tagbar_last_lookup_time = 0
+let s:airline_tagbar_last_lookup_val = ''
+function! airline#extensions#tagbar#currenttag()
+ if get(w:, 'airline_active', 0)
+ if !s:init
+ try
+ " try to load the plugin, if filetypes are disabled,
+ " this will cause an error, so try only once
+ let a=tagbar#currenttag('%', '', '')
+ catch
+ endtry
+ unlet! a
+ let s:init=1
+ endif
+ " function tagbar#currenttag does not exist, if filetype is not enabled
+ if s:airline_tagbar_last_lookup_time != localtime() && exists("*tagbar#currenttag")
+ let s:airline_tagbar_last_lookup_val = tagbar#currenttag('%s', '', s:flags)
+ let s:airline_tagbar_last_lookup_time = localtime()
+ endif
+ return s:airline_tagbar_last_lookup_val
+ endif
+ return ''
+endfunction
+
+function! airline#extensions#tagbar#init(ext)
+ call a:ext.add_inactive_statusline_func('airline#extensions#tagbar#inactive_apply')
+ let g:tagbar_status_func = 'airline#extensions#tagbar#get_status'
+
+ call airline#parts#define_function('tagbar', 'airline#extensions#tagbar#currenttag')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/term.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/term.vim
new file mode 100644
index 0000000..c5b578e
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/term.vim
@@ -0,0 +1,43 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+function! airline#extensions#term#apply(...)
+ if &buftype == 'terminal'
+ let spc = g:airline_symbols.space
+
+ let name=get(g:airline_mode_map, 't', 't')
+ call a:1.add_section('airline_a', spc.name.spc)
+ call a:1.add_section('airline_b', '')
+ call a:1.add_section('airline_term', spc.s:termname())
+ call a:1.split()
+ call a:1.add_section('airline_y', '')
+ call a:1.add_section('airline_z', spc.airline#section#create_right(['linenr', 'maxlinenr']))
+ return 1
+ endif
+endfunction
+
+function! airline#extensions#term#inactive_apply(...)
+ if getbufvar(a:2.bufnr, '&buftype') == 'terminal'
+ let spc = g:airline_symbols.space
+ call a:1.add_section('airline_a', spc.'TERMINAL'.spc)
+ call a:1.add_section('airline_b', spc.'%f')
+ return 1
+ endif
+endfunction
+
+function! s:termname()
+ let bufname = bufname('%')
+ if has('nvim')
+ return matchstr(bufname, 'term.*:\zs.*')
+ else
+ " get rid of leading '!'
+ return bufname[1:]
+ endif
+endfunction
+
+function! airline#extensions#term#init(ext)
+ call a:ext.add_statusline_func('airline#extensions#term#apply')
+ call a:ext.add_inactive_statusline_func('airline#extensions#term#inactive_apply')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tmuxline.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tmuxline.vim
new file mode 100644
index 0000000..44c7ec2
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/tmuxline.vim
@@ -0,0 +1,27 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !exists(':Tmuxline')
+ finish
+endif
+
+let s:tmuxline_snapshot_file = get(g:, 'airline#extensions#tmuxline#snapshot_file', '')
+let s:color_template = get(g:, 'airline#extensions#tmuxline#color_template', 'normal')
+
+function! airline#extensions#tmuxline#init(ext)
+ call a:ext.add_theme_func('airline#extensions#tmuxline#set_tmux_colors')
+endfunction
+
+function! airline#extensions#tmuxline#set_tmux_colors(palette)
+ let color_template = has_key(a:palette, s:color_template) ? s:color_template : 'normal'
+ let mode_palette = a:palette[color_template]
+
+ let tmuxline_theme = tmuxline#api#create_theme_from_airline(mode_palette)
+ call tmuxline#api#set_theme(tmuxline_theme)
+
+ if strlen(s:tmuxline_snapshot_file)
+ call tmuxline#api#snapshot(s:tmuxline_snapshot_file)
+ endif
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/undotree.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/undotree.vim
new file mode 100644
index 0000000..9e43dfb
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/undotree.vim
@@ -0,0 +1,28 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !exists(':UndotreeToggle')
+ finish
+endif
+
+function! airline#extensions#undotree#apply(...)
+ if exists('t:undotree')
+ if &ft == 'undotree'
+ if exists('*t:undotree.GetStatusLine')
+ call airline#extensions#apply_left_override('undo', '%{t:undotree.GetStatusLine()}')
+ else
+ call airline#extensions#apply_left_override('undotree', '%f')
+ endif
+ endif
+
+ if &ft == 'diff' && exists('*t:diffpanel.GetStatusLine')
+ call airline#extensions#apply_left_override('diff', '%{t:diffpanel.GetStatusLine()}')
+ endif
+ endif
+endfunction
+
+function! airline#extensions#undotree#init(ext)
+ call a:ext.add_statusline_func('airline#extensions#undotree#apply')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/unicode.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/unicode.vim
new file mode 100644
index 0000000..4afe129
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/unicode.vim
@@ -0,0 +1,24 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !get(g:, 'loaded_unicodePlugin', 0)
+ finish
+endif
+
+function! airline#extensions#unicode#apply(...)
+ if exists(":UnicodeTable") == 2 && bufname('') ==# 'UnicodeTable'
+ call airline#parts#define('unicode', {
+ \ 'text': '[UnicodeTable]',
+ \ 'accent': 'bold' })
+ let w:airline_section_a = airline#section#create(['unicode'])
+ let w:airline_section_b = ''
+ let w:airline_section_c = ' '
+ let w:airline_section_y = ''
+ endif
+endfunction
+
+function! airline#extensions#unicode#init(ext)
+ call a:ext.add_statusline_func('airline#extensions#unicode#apply')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/unite.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/unite.vim
new file mode 100644
index 0000000..c6a09f0
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/unite.vim
@@ -0,0 +1,24 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !get(g:, 'loaded_unite', 0)
+ finish
+endif
+
+function! airline#extensions#unite#apply(...)
+ if &ft == 'unite'
+ call a:1.add_section('airline_a', ' Unite ')
+ call a:1.add_section('airline_b', ' %{get(unite#get_context(), "buffer_name", "")} ')
+ call a:1.add_section('airline_c', ' %{unite#get_status_string()} ')
+ call a:1.split()
+ call a:1.add_section('airline_y', ' %{get(unite#get_context(), "real_buffer_name", "")} ')
+ return 1
+ endif
+endfunction
+
+function! airline#extensions#unite#init(ext)
+ let g:unite_force_overwrite_statusline = 0
+ call a:ext.add_statusline_func('airline#extensions#unite#apply')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/vimagit.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/vimagit.vim
new file mode 100644
index 0000000..8c98ec9
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/vimagit.vim
@@ -0,0 +1,34 @@
+" MIT License. Copyright (c) 2016-2018 Jerome Reybert et al.
+" vim: et ts=2 sts=2 sw=2
+
+" This plugin replace the whole section_a when in vimagit buffer
+scriptencoding utf-8
+
+if !get(g:, 'loaded_magit', 0)
+ finish
+endif
+
+function! airline#extensions#vimagit#init(ext)
+ call a:ext.add_statusline_func('airline#extensions#vimagit#apply')
+endfunction
+
+function! airline#extensions#vimagit#get_mode()
+ if ( exists("*magit#get_current_mode") )
+ return magit#get_current_mode()
+ else
+ if ( b:magit_current_commit_mode == '' )
+ return "STAGING"
+ elseif ( b:magit_current_commit_mode == 'CC' )
+ return "COMMIT"
+ elseif ( b:magit_current_commit_mode == 'CA' )
+ return "AMEND"
+ else
+ return "???"
+ endif
+endfunction
+
+function! airline#extensions#vimagit#apply(...)
+ if ( &filetype == 'magit' )
+ let w:airline_section_a = '%{airline#extensions#vimagit#get_mode()}'
+ endif
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/vimtex.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/vimtex.vim
new file mode 100644
index 0000000..9eda8d5
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/vimtex.vim
@@ -0,0 +1,84 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+" This plugin replace the whole section_a when in vimagit buffer
+scriptencoding utf-8
+
+let s:spc = g:airline_symbols.space
+
+function! s:SetDefault(var, val)
+ if !exists(a:var)
+ execute 'let ' . a:var . '=' . string(a:val)
+ endif
+endfunction
+
+" Left and right delimiters (added only when status string is not empty)
+call s:SetDefault( 'g:airline#extensions#vimtex#left', "{")
+call s:SetDefault( 'g:airline#extensions#vimtex#right', "}")
+
+" The current tex file is the main project file
+call s:SetDefault( 'g:airline#extensions#vimtex#main', "" )
+"
+" The current tex file is a subfile of the project
+" and the compilation is set for the main file
+call s:SetDefault( 'g:airline#extensions#vimtex#sub_main', "m")
+"
+" The current tex file is a subfile of the project
+" and the compilation is set for this subfile
+call s:SetDefault( 'g:airline#extensions#vimtex#sub_local', "l")
+"
+" Compilation is running and continuous compilation is off
+call s:SetDefault( 'g:airline#extensions#vimtex#compiled', "c₁")
+
+" Compilation is running and continuous compilation is on
+call s:SetDefault( 'g:airline#extensions#vimtex#continuous', "c")
+
+" Viewer is opened
+call s:SetDefault( 'g:airline#extensions#vimtex#viewer', "v")
+
+function! airline#extensions#vimtex#init(ext)
+ call airline#parts#define_raw('vimtex', '%{airline#extensions#vimtex#get_scope()}')
+ call a:ext.add_statusline_func('airline#extensions#vimtex#apply')
+endfunction
+
+function! airline#extensions#vimtex#apply(...)
+ if exists("b:vimtex")
+ let w:airline_section_x = get(w:, 'airline_section_x', g:airline_section_x)
+ let w:airline_section_x.=s:spc.g:airline_left_alt_sep.s:spc.'%{airline#extensions#vimtex#get_scope()}'
+ endif
+endfunction
+
+function! airline#extensions#vimtex#get_scope()
+ let l:status = ''
+
+ let vt_local = get(b:, 'vimtex_local', {})
+ if empty(vt_local)
+ let l:status .= g:airline#extensions#vimtex#main
+ else
+ if get(vt_local, 'active')
+ let l:status .= g:airline#extensions#vimtex#sub_local
+ else
+ let l:status .= g:airline#extensions#vimtex#sub_main
+ endif
+ endif
+
+ if get(get(get(b:, 'vimtex', {}), 'viewer', {}), 'xwin_id')
+ let l:status .= g:airline#extensions#vimtex#viewer
+ endif
+
+ let l:compiler = get(get(b:, 'vimtex', {}), 'compiler', {})
+ if !empty(l:compiler)
+ if has_key(l:compiler, 'is_running') && b:vimtex.compiler.is_running()
+ if get(l:compiler, 'continuous')
+ let l:status .= g:airline#extensions#vimtex#continuous
+ else
+ let l:status .= g:airline#extensions#vimtex#compiled
+ endif
+ endif
+ endif
+
+ if !empty(l:status)
+ let l:status = g:airline#extensions#vimtex#left . l:status . g:airline#extensions#vimtex#right
+ endif
+ return l:status
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/virtualenv.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/virtualenv.vim
new file mode 100644
index 0000000..b494d85
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/virtualenv.vim
@@ -0,0 +1,31 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+let s:spc = g:airline_symbols.space
+
+function! airline#extensions#virtualenv#init(ext)
+ call a:ext.add_statusline_func('airline#extensions#virtualenv#apply')
+endfunction
+
+function! airline#extensions#virtualenv#apply(...)
+ if &filetype =~# "python"
+ if get(g:, 'virtualenv_loaded', 0)
+ let statusline = virtualenv#statusline()
+ else
+ let statusline = fnamemodify($VIRTUAL_ENV, ':t')
+ endif
+ if !empty(statusline)
+ call airline#extensions#append_to_section('x',
+ \ s:spc.g:airline_right_alt_sep.s:spc.statusline)
+ endif
+ endif
+endfunction
+
+function! airline#extensions#virtualenv#update()
+ if &filetype =~# "python"
+ call airline#extensions#virtualenv#apply()
+ call airline#update_statusline()
+ endif
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/whitespace.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/whitespace.vim
new file mode 100644
index 0000000..c9b5a2a
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/whitespace.vim
@@ -0,0 +1,171 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+" http://got-ravings.blogspot.com/2008/10/vim-pr0n-statusline-whitespace-flags.html
+
+scriptencoding utf-8
+
+let s:show_message = get(g:, 'airline#extensions#whitespace#show_message', 1)
+let s:symbol = get(g:, 'airline#extensions#whitespace#symbol', g:airline_symbols.whitespace)
+let s:default_checks = ['indent', 'trailing', 'mixed-indent-file']
+
+let s:enabled = get(g:, 'airline#extensions#whitespace#enabled', 1)
+let s:skip_check_ft = {'make': ['indent', 'mixed-indent-file']}
+
+function! s:check_mixed_indent()
+ let indent_algo = get(g:, 'airline#extensions#whitespace#mixed_indent_algo', 0)
+ if indent_algo == 1
+ " [<tab>]<space><tab>
+ " spaces before or between tabs are not allowed
+ let t_s_t = '(^\t* +\t\s*\S)'
+ " <tab>(<space> x count)
+ " count of spaces at the end of tabs should be less than tabstop value
+ let t_l_s = '(^\t+ {' . &ts . ',}' . '\S)'
+ return search('\v' . t_s_t . '|' . t_l_s, 'nw')
+ elseif indent_algo == 2
+ return search('\v(^\t* +\t\s*\S)', 'nw')
+ else
+ return search('\v(^\t+ +)|(^ +\t+)', 'nw')
+ endif
+endfunction
+
+function! s:check_mixed_indent_file()
+ let c_like_langs = get(g:, 'airline#extensions#c_like_langs',
+ \ [ 'arduino', 'c', 'cpp', 'cuda', 'go', 'javascript', 'ld', 'php' ])
+ if index(c_like_langs, &ft) > -1
+ " for C-like languages: allow /** */ comment style with one space before the '*'
+ let head_spc = '\v(^ +\*@!)'
+ else
+ let head_spc = '\v(^ +)'
+ endif
+ let indent_tabs = search('\v(^\t+)', 'nw')
+ let indent_spc = search(head_spc, 'nw')
+ if indent_tabs > 0 && indent_spc > 0
+ return printf("%d:%d", indent_tabs, indent_spc)
+ else
+ return ''
+ endif
+endfunction
+
+function! airline#extensions#whitespace#check()
+ let max_lines = get(g:, 'airline#extensions#whitespace#max_lines', 20000)
+ if &readonly || !&modifiable || !s:enabled || line('$') > max_lines
+ \ || get(b:, 'airline_whitespace_disabled', 0)
+ return ''
+ endif
+ let skip_check_ft = extend(s:skip_check_ft,
+ \ get(g:, 'airline#extensions#whitespace#skip_indent_check_ft', {}), 'force')
+
+ if !exists('b:airline_whitespace_check')
+ let b:airline_whitespace_check = ''
+ let checks = get(b:, 'airline_whitespace_checks', get(g:, 'airline#extensions#whitespace#checks', s:default_checks))
+
+ let trailing = 0
+ let check = 'trailing'
+ if index(checks, check) > -1 && index(get(skip_check_ft, &ft, []), check) < 0
+ try
+ let regexp = get(g:, 'airline#extensions#whitespace#trailing_regexp', '\s$')
+ let trailing = search(regexp, 'nw')
+ catch
+ call airline#util#warning(printf('Whitespace: error occurred evaluating "%s"', regexp))
+ echomsg v:exception
+ return ''
+ endtry
+ endif
+
+ let mixed = 0
+ let check = 'indent'
+ if index(checks, check) > -1 && index(get(skip_check_ft, &ft, []), check) < 0
+ let mixed = s:check_mixed_indent()
+ endif
+
+ let mixed_file = ''
+ let check = 'mixed-indent-file'
+ if index(checks, check) > -1 && index(get(skip_check_ft, &ft, []), check) < 0
+ let mixed_file = s:check_mixed_indent_file()
+ endif
+
+ let long = 0
+ if index(checks, 'long') > -1 && &tw > 0
+ let long = search('\%>'.&tw.'v.\+', 'nw')
+ endif
+
+ if trailing != 0 || mixed != 0 || long != 0 || !empty(mixed_file)
+ let b:airline_whitespace_check = s:symbol
+ if strlen(s:symbol) > 0
+ let space = (g:airline_symbols.space)
+ else
+ let space = ''
+ endif
+
+ if s:show_message
+ if trailing != 0
+ let trailing_fmt = get(g:, 'airline#extensions#whitespace#trailing_format', '[%s]trailing')
+ let b:airline_whitespace_check .= space.printf(trailing_fmt, trailing)
+ endif
+ if mixed != 0
+ let mixed_indent_fmt = get(g:, 'airline#extensions#whitespace#mixed_indent_format', '[%s]mixed-indent')
+ let b:airline_whitespace_check .= space.printf(mixed_indent_fmt, mixed)
+ endif
+ if long != 0
+ let long_fmt = get(g:, 'airline#extensions#whitespace#long_format', '[%s]long')
+ let b:airline_whitespace_check .= space.printf(long_fmt, long)
+ endif
+ if !empty(mixed_file)
+ let mixed_indent_file_fmt = get(g:, 'airline#extensions#whitespace#mixed_indent_file_format', '[%s]mix-indent-file')
+ let b:airline_whitespace_check .= space.printf(mixed_indent_file_fmt, mixed_file)
+ endif
+ endif
+ endif
+ endif
+ return airline#util#shorten(b:airline_whitespace_check, 120, 9)
+endfunction
+
+function! airline#extensions#whitespace#toggle()
+ if s:enabled
+ augroup airline_whitespace
+ autocmd!
+ augroup END
+ augroup! airline_whitespace
+ let s:enabled = 0
+ else
+ call airline#extensions#whitespace#init()
+ let s:enabled = 1
+ endif
+
+ if exists("g:airline#extensions#whitespace#enabled")
+ let g:airline#extensions#whitespace#enabled = s:enabled
+ if s:enabled && match(g:airline_section_warning, '#whitespace#check') < 0
+ let g:airline_section_warning .= airline#section#create(['whitespace'])
+ call airline#update_statusline()
+ endif
+ endif
+ call airline#util#warning(printf('Whitespace checking: %s',(s:enabled ? 'Enabled' : 'Disabled')))
+endfunction
+
+function! airline#extensions#whitespace#disable()
+ if s:enabled
+ call airline#extensions#whitespace#toggle()
+ endif
+endfunction
+
+function! airline#extensions#whitespace#init(...)
+ call airline#parts#define_function('whitespace', 'airline#extensions#whitespace#check')
+
+ unlet! b:airline_whitespace_check
+ augroup airline_whitespace
+ autocmd!
+ autocmd CursorHold,BufWritePost * call <sid>ws_refresh()
+ augroup END
+endfunction
+
+function! s:ws_refresh()
+ if get(b:, 'airline_ws_changedtick', 0) == b:changedtick
+ return
+ endif
+ unlet! b:airline_whitespace_check
+ if get(g:, 'airline_skip_empty_sections', 0)
+ exe ':AirlineRefresh'
+ endif
+ let b:airline_ws_changedtick = b:changedtick
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/windowswap.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/windowswap.vim
new file mode 100644
index 0000000..5ef531e
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/windowswap.vim
@@ -0,0 +1,29 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !exists('g:loaded_windowswap')
+ finish
+endif
+
+let s:spc = g:airline_symbols.space
+
+if !exists('g:airline#extensions#windowswap#indicator_text')
+ let g:airline#extensions#windowswap#indicator_text = 'WS'
+endif
+
+function! airline#extensions#windowswap#init(ext)
+ call airline#parts#define_function('windowswap', 'airline#extensions#windowswap#get_status')
+endfunction
+
+function! airline#extensions#windowswap#get_status()
+ " use new tab-aware api if WS is up to date
+ let s:mark = exists('*WindowSwap#IsCurrentWindowMarked') ?
+ \WindowSwap#IsCurrentWindowMarked() :
+ \(WindowSwap#HasMarkedWindow() && WindowSwap#GetMarkedWindowNum() == winnr())
+ if s:mark
+ return g:airline#extensions#windowswap#indicator_text.s:spc
+ endif
+ return ''
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/wordcount.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/wordcount.vim
new file mode 100644
index 0000000..a9b9aac
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/wordcount.vim
@@ -0,0 +1,117 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2 fdm=marker
+
+scriptencoding utf-8
+
+" get wordcount {{{1
+if exists('*wordcount')
+ function! s:get_wordcount(visual_mode_active)
+ let query = a:visual_mode_active ? 'visual_words' : 'words'
+ return get(wordcount(), query, 0)
+ endfunction
+else " Pull wordcount from the g_ctrl-g stats
+ function! s:get_wordcount(visual_mode_active)
+ let pattern = a:visual_mode_active
+ \ ? '^.\D*\d\+\D\+\d\+\D\+\zs\d\+'
+ \ : '^.\D*\%(\d\+\D\+\)\{5}\zs\d\+'
+
+ let save_status = v:statusmsg
+ if !a:visual_mode_active && col('.') == col('$')
+ let save_pos = getpos('.')
+ execute "silent normal! g\<c-g>"
+ call setpos('.', save_pos)
+ else
+ execute "silent normal! g\<c-g>"
+ endif
+ let stats = v:statusmsg
+ let v:statusmsg = save_status
+
+ return str2nr(matchstr(stats, pattern))
+ endfunction
+endif
+
+" format {{{1
+let s:formatter = get(g:, 'airline#extensions#wordcount#formatter', 'default')
+
+" wrapper function for compatibility; redefined below for old-style formatters
+function! s:format_wordcount(wordcount)
+ return airline#extensions#wordcount#formatters#{s:formatter}#to_string(a:wordcount)
+endfunction
+
+" check user-defined formatter exists with appropriate functions, otherwise
+" fall back to default
+if s:formatter !=# 'default'
+ execute 'runtime! autoload/airline/extensions/wordcount/formatters/'.s:formatter
+ if !exists('*airline#extensions#wordcount#formatters#{s:formatter}#to_string')
+ if !exists('*airline#extensions#wordcount#formatters#{s:formatter}#format')
+ let s:formatter = 'default'
+ else
+ " redefine for backwords compatibility
+ function! s:format_wordcount(_)
+ if mode() ==? 'v'
+ return b:airline_wordcount
+ else
+ return airline#extensions#wordcount#formatters#{s:formatter}#format()
+ endif
+ endfunction
+ endif
+ endif
+endif
+
+" update {{{1
+let s:wordcount_cache = 0 " cache wordcount for performance when force_update=0
+function! s:update_wordcount(force_update)
+ let wordcount = s:get_wordcount(0)
+ if wordcount != s:wordcount_cache || a:force_update
+ let s:wordcount_cache = wordcount
+ let b:airline_wordcount = s:format_wordcount(wordcount)
+ endif
+endfunction
+
+let s:visual_active = 0 " Boolean: for when to get visual wordcount
+function airline#extensions#wordcount#get()
+ if s:visual_active
+ return s:format_wordcount(s:get_wordcount(1))
+ else
+ if get(b:, 'airline_changedtick', 0) != b:changedtick
+ call s:update_wordcount(0)
+ let b:airline_changedtick = b:changedtick
+ endif
+ return get(b:, 'airline_wordcount', '')
+ endif
+endfunction
+
+" airline functions {{{1
+" default filetypes:
+let s:filetypes = ['help', 'markdown', 'rst', 'org', 'text', 'asciidoc', 'tex', 'mail']
+function! airline#extensions#wordcount#apply(...)
+ let filetypes = get(g:, 'airline#extensions#wordcount#filetypes', s:filetypes)
+
+ " Check if filetype needs testing
+ if did_filetype() || filetypes isnot s:filetypes
+ let s:filetypes = filetypes
+
+ " Select test based on type of "filetypes": new=list, old=string
+ if type(filetypes) == get(v:, 't_list', type([]))
+ \ ? index(filetypes, &filetype) > -1 || index(filetypes, 'all') > -1
+ \ : match(&filetype, filetypes) > -1
+ let b:airline_changedtick = -1
+ call s:update_wordcount(1) " force update: ensures initial worcount exists
+ elseif exists('b:airline_wordcount') " cleanup when filetype is removed
+ unlet b:airline_wordcount
+ endif
+ endif
+
+ if exists('b:airline_wordcount')
+ call airline#extensions#prepend_to_section(
+ \ 'z', '%{airline#extensions#wordcount#get()}')
+ endif
+endfunction
+
+function! airline#extensions#wordcount#init(ext)
+ augroup airline_wordcount
+ autocmd! User AirlineModeChanged nested
+ \ let s:visual_active = (mode() ==? 'v' || mode() ==? 's')
+ augroup END
+ call a:ext.add_statusline_func('airline#extensions#wordcount#apply')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/wordcount/formatters/default.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/wordcount/formatters/default.vim
new file mode 100644
index 0000000..5682921
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/wordcount/formatters/default.vim
@@ -0,0 +1,39 @@
+" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+function! airline#extensions#wordcount#formatters#default#update_fmt(...)
+ let s:fmt = get(g:, 'airline#extensions#wordcount#formatter#default#fmt', '%s words')
+ let s:fmt_short = get(g:, 'airline#extensions#wordcount#formatter#default#fmt_short', s:fmt == '%s words' ? '%sW' : s:fmt)
+endfunction
+
+" Reload format when statusline is rebuilt
+call airline#extensions#wordcount#formatters#default#update_fmt()
+if index(g:airline_statusline_funcrefs, function('airline#extensions#wordcount#formatters#default#update_fmt')) == -1
+ " only add it, if not already done
+ call airline#add_statusline_funcref(function('airline#extensions#wordcount#formatters#default#update_fmt'))
+endif
+
+if match(get(v:, 'lang', ''), '\v\cC|en') > -1
+ let s:decimal_group = ','
+elseif match(get(v:, 'lang', ''), '\v\cde|dk|fr|pt') > -1
+ let s:decimal_group = '.'
+else
+ let s:decimal_group = ''
+endif
+
+function! airline#extensions#wordcount#formatters#default#to_string(wordcount)
+ if winwidth(0) >= 80
+ if a:wordcount > 999
+ " Format number according to locale, e.g. German: 1.245 or English: 1,245
+ let wordcount = substitute(a:wordcount, '\d\@<=\(\(\d\{3\}\)\+\)$', s:decimal_group.'&', 'g')
+ else
+ let wordcount = a:wordcount
+ endif
+ let str = printf(s:fmt, wordcount)
+ else
+ let str = printf(s:fmt_short, a:wordcount)
+ endif
+ return str . g:airline_symbols.space . g:airline_right_alt_sep . g:airline_symbols.space
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/xkblayout.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/xkblayout.vim
new file mode 100644
index 0000000..b9d56a1
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/xkblayout.vim
@@ -0,0 +1,24 @@
+" MIT License. Copyright (c) 2017-2018 YoungHoon Rhiu et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+if !exists('g:XkbSwitchLib')
+ finish
+endif
+
+function! airline#extensions#xkblayout#status()
+ let keyboard_layout = libcall(g:XkbSwitchLib, 'Xkb_Switch_getXkbLayout', '')
+ let keyboard_layout = split(keyboard_layout, '\.')[-1]
+ let short_codes = get(g:, 'airline#extensions#xkblayout#short_codes', {'2SetKorean': 'KR', 'Chinese': 'CN', 'Japanese': 'JP'})
+
+ if has_key(short_codes, keyboard_layout)
+ let keyboard_layout = short_codes[keyboard_layout]
+ endif
+
+ return keyboard_layout
+endfunction
+
+function! airline#extensions#xkblayout#init(ext)
+ call airline#parts#define_function('xkblayout', 'airline#extensions#xkblayout#status')
+endfunction
diff --git a/dotfiles/.local/share/nvim/site/autoload/airline/extensions/ycm.vim b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/ycm.vim
new file mode 100644
index 0000000..677ba03
--- /dev/null
+++ b/dotfiles/.local/share/nvim/site/autoload/airline/extensions/ycm.vim
@@ -0,0 +1,37 @@
+" MIT License. Copyright (c) 2015-2018 Evgeny Firsov et al.
+" vim: et ts=2 sts=2 sw=2
+
+scriptencoding utf-8
+
+let s:spc = g:airline_symbols.space
+let s:error_symbol = get(g:, 'airline#extensions#ycm#error_symbol', 'E:')
+let s:warning_symbol = get(g:, 'airline#extensions#ycm#warning_symbol', 'W:')
+
+function! airline#extensions#ycm#init(ext)
+ call airline#parts#define_function('ycm_error_count', 'airline#extensions#ycm#get_error_count')
+ call airline#parts#define_function('ycm_warning_count', 'airline#extensions#ycm#get_warning_count')
+endfunction
+
+function! airline#extensions#ycm#get_error_count()
+ if exists(':YcmDiag') && exists("*youcompleteme#GetErrorCount")
+ let cnt = youcompleteme#GetErrorCount()
+
+ if cnt != 0
+ return s:error_symbol.cnt
+ endif
+ endif
+
+ return ''
+endfunction
+
+function! airline#extensions#ycm#get_warning_count()
+ if exists(':YcmDiag') && exists("*youcompleteme#GetWarningCount")
+ let cnt = youcompleteme#GetWarningCount()
+
+ if cnt != 0
+ return s:warning_symbol.cnt.s:spc
+ endif
+ endif
+
+ return ''
+endfunction