aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.config/nvim/init.lua297
-rw-r--r--.vimrc291
2 files changed, 372 insertions, 216 deletions
diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua
index 7db69d0..56e74d3 100644
--- a/.config/nvim/init.lua
+++ b/.config/nvim/init.lua
@@ -353,8 +353,6 @@ paq({
'LeafCage/foldCC.vim',
-- Show indent.
'Yggdroot/indentLine',
- -- Cool status line.
- 'itchyny/lightline.vim',
-- Highlight matched parentheses.
'itchyny/vim-parenmatch',
-- Highlight specified words.
@@ -563,28 +561,6 @@ vimrc.autocmd('BufRead', '*', function()
end)
--- Syntax highlight for .vimrc {{{2
-
-vimrc.autocmd('ColorScheme', 'ocean', function()
- if vim.o.background ~= 'dark' then
- return
- end
-
- -- yankround
- vimrc.hi_link('YankRoundRegion', 'DiffChange')
-
- -- sandwich
- vimrc.hi_link('OperatorSandwichBuns', 'DiffChange')
- vimrc.hi_link('OperatorSandwichStuff', 'DiffChange')
- vimrc.hi_link('OperatorSandwichDelete', 'DiffChange')
- vimrc.hi_link('OperatorSandwichAdd', 'OperatorSandwichBuns')
-
- -- easymotion
- vimrc.hi('EasyMotionShade', 'guifg=#4d4d4d guibg=NONE gui=NONE cterm=NONE')
- vimrc.hi('EasyMotionTarget', 'guifg=#ff7100 guibg=NONE gui=underline cterm=underline')
- vimrc.hi_link('EasyMotionMoveHL', 'IncSearch')
-end)
-
-- Mappings {{{1
@@ -1125,7 +1101,9 @@ command! -nargs=+
--- Color scheme {{{1
+-- Appearance {{{1
+
+-- Color scheme {{{2
-- A command which changes color scheme with fall back.
vim.cmd([[
@@ -1156,6 +1134,180 @@ vim.cmd('ColorScheme! ocean')
+-- Statusline {{{2
+
+vim.o.statusline = '%!v:lua.vimrc.statusline.build()'
+
+vimrc.statusline = {}
+
+function vimrc.statusline.build()
+ local winid = vim.g.statusline_winid
+ local bufnr = vim.fn.winbufnr(winid)
+ local is_active = winid == vim.fn.win_getid()
+ if is_active then
+ local mode, mode_hl = vimrc.statusline.mode()
+ local ro = vimrc.statusline.readonly(bufnr)
+ local fname = vimrc.statusline.filename(bufnr)
+ local mod = vimrc.statusline.modified(bufnr)
+ local linenum = vimrc.statusline.linenum(winid)
+ local fenc = vimrc.statusline.fenc_ff(bufnr)
+ local ft = vimrc.statusline.filetype(bufnr)
+ return string.format(
+ '%%#statusLineMode%s# %s %%#statusLineLeft# %s%s%s %%#StatusLine#%%=%%#statusLineRight# %s | %s | %s ',
+ mode_hl,
+ mode,
+ ro and ro .. ' ' or '',
+ fname,
+ mod and ' ' .. mod or '',
+ linenum,
+ fenc,
+ ft)
+ else
+ local ro = vimrc.statusline.readonly(bufnr)
+ local fname = vimrc.statusline.filename(bufnr)
+ local mod = vimrc.statusline.modified(bufnr)
+ local linenum = vimrc.statusline.linenum(winid)
+ local fenc = vimrc.statusline.fenc_ff(bufnr)
+ local ft = vimrc.statusline.filetype(bufnr)
+ return string.format(
+ '%%#statusLineLeft# %s%s%s %%#StatusLine#%%=%%#statusLineRight# %s | %s | %s ',
+ ro and ro .. ' ' or '',
+ fname,
+ mod and ' ' .. mod or '',
+ linenum,
+ fenc,
+ ft)
+ end
+end
+
+function vimrc.statusline.mode()
+ local mode_map = {
+ n = { 'N', 'Normal' },
+ no = { 'O', 'Operator' },
+ nov = { 'Oc', 'Operator' },
+ noV = { 'Ol', 'Operator' },
+ [vimrc.term('no<C-v>')] = { 'Ob', 'Operator' },
+ niI = { 'In', 'Insert' },
+ niR = { 'Rn', 'Replace' },
+ niV = { 'Rn', 'Replace' },
+ v = { 'V', 'Visual' },
+ V = { 'Vl', 'Visual' },
+ [vimrc.term('<C-v>')] = { 'Vb', 'Visual' },
+ s = { 'S', 'Visual' },
+ S = { 'Sl', 'Visual' },
+ [vimrc.term('<C-s>')] = { 'Sb', 'Visual' },
+ i = { 'I', 'Insert' },
+ ic = { 'I?', 'Insert' },
+ ix = { 'I?', 'Insert' },
+ R = { 'R', 'Replace' },
+ Rc = { 'R?', 'Replace' },
+ Rv = { 'R', 'Replace' },
+ Rx = { 'R?', 'Replace' },
+ c = { 'C', 'Command' },
+ cv = { 'C', 'Command' },
+ ce = { 'C', 'Command' },
+ r = { '-', 'Other' },
+ rm = { '-', 'Other' },
+ ['r?'] = { '-', 'Other' },
+ ['!'] = { '-', 'Other' },
+ t = { 'T', 'Terminal' },
+ }
+ local vim_mode_and_hl = mode_map[vim.fn.mode(true)] or { '-', 'Other' }
+ local vim_mode = vim_mode_and_hl[1]
+ local hl = vim_mode_and_hl[2]
+
+ -- Calling `eskk#statusline()` makes Vim autoload eskk. If you call it
+ -- without checking `g:loaded_autoload_eskk`, eskk is loaded on an early
+ -- stage of the initialization (probably the first rendering of status line),
+ -- which slows down Vim startup. Loading eskk can be delayed by checking both
+ -- of `g:loaded_eskk` and `g:loaded_autoload_eskk`.
+ local skk_mode
+ if vim.g.loaded_eskk and vim.g.loaded_autoload_eskk then
+ skk_mode = vim.fn['eskk#statusline'](' (%s)', '')
+ else
+ skk_mode = ''
+ end
+
+ return vim_mode .. skk_mode, hl
+end
+
+function vimrc.statusline.readonly(bufnr)
+ local ro = vim.fn.getbufvar(bufnr, '&readonly')
+ if ro == 1 then
+ return '[RO]'
+ else
+ return nil
+ end
+end
+
+function vimrc.statusline.filename(bufnr)
+ local name = vim.fn.bufname(bufnr)
+ if name == '' then
+ return '[No Name]'
+ else
+ return name
+ end
+end
+
+function vimrc.statusline.modified(bufnr)
+ local mod = vim.fn.getbufvar(bufnr, '&modified')
+ local ma = vim.fn.getbufvar(bufnr, '&modifiable')
+ if mod == 1 then
+ return '[+]'
+ elseif ma == 0 then
+ return '[-]'
+ else
+ return nil
+ end
+end
+
+function vimrc.statusline.linenum(winid)
+ return vim.fn.line('.', winid) .. '/' .. vim.fn.line('$', winid)
+end
+
+function vimrc.statusline.fenc_ff(bufnr)
+ local fenc = vim.fn.getbufvar(bufnr, '&fileencoding')
+ local ff = vim.fn.getbufvar(bufnr, '&fileformat')
+ local bom = vim.fn.getbufvar(bufnr, '&bomb') -- BOMB!!
+
+ if fenc == '' then
+ local fencs = vim.fn.split(vim.o.fileencodings, ',')
+ fenc = fencs[1] or vim.o.encoding
+ elseif fenc == 'utf-8' then
+ fenc = bom and 'U8[BOM]' or 'U8'
+ elseif fenc == 'utf-16' then
+ fenc = 'U16[BE]'
+ elseif fenc == 'utf-16le' then
+ fenc = 'U16[LE]'
+ elseif fenc == 'ucs-4' then
+ fenc = 'U32[BE]'
+ elseif fenc == 'ucs-4le' then
+ fenc = 'U32[LE]'
+ else
+ fenc = fenc:upper()
+ end
+
+ if ff == 'unix' then
+ ff = ''
+ elseif ff == 'dos' then
+ ff = ' (CRLF)'
+ elseif ff == 'mac' then
+ ff = ' (CR)'
+ else
+ ff = ' (Unknown)'
+ end
+
+ return fenc .. ff
+end
+
+function vimrc.statusline.filetype(bufnr)
+ local ft = vim.fn.getbufvar(bufnr, '&filetype')
+ if ft == '' then
+ return '[None]'
+ else
+ return ft
+ end
+end
-- Plugins configuration {{{1
-- Disable standard plugins. {{{2
@@ -1451,101 +1603,6 @@ vimrc.map_plug('x', 'gJ', '(jplus-input)')
--- lightline {{{2
-
-vimrc.lightline = {}
-
-function vimrc.lightline.mode()
- -- Calling `eskk#statusline()` makes Vim autoload eskk. If you call it
- -- without checking `g:loaded_autoload_eskk`, eskk is loaded on an early
- -- stage of the initialization (probably the first rendering of status line),
- -- which slows down Vim startup. Loading eskk can be delayed by checking both
- -- of `g:loaded_eskk` and `g:loaded_autoload_eskk`.
- local skk
- if vim.g.loaded_eskk and vim.g.loaded_autoload_eskk then
- skk = vim.fn['eskk#statusline'](' (%s)', '')
- else
- skk = ''
- end
- return vim.fn['lightline#mode']() .. skk
-end
-
-
-function vimrc.lightline.linenum()
- return vim.fn.line('.') .. '/' .. vim.fn.line('$')
-end
-
-
-function vimrc.lightline.fileformat()
- if vim.o.fileformat == 'unix' then
- return 'LF'
- elseif vim.o.fileformat == 'dos' then
- return 'CRLF'
- elseif vim.o.fileformat == 'mac' then
- return 'CR'
- else
- return '-'
- end
-end
-
-
-vim.cmd([[
-function! Lightline_mode() abort
- return v:lua.vimrc.lightline.mode()
-endfunction
-
-function! Lightline_linenum() abort
- return v:lua.vimrc.lightline.linenum()
-endfunction
-
-function! Lightline_fileformat() abort
- return v:lua.vimrc.lightline.fileformat()
-endfunction
-]])
-
-
-
-vim.g.lightline = {
- colorscheme = 'jellybeans',
- active = {
- left = {{'mode', 'paste'}, {'readonly', 'filename', 'modified'}},
- right = {{'linenum'}, {'fileencoding', 'fileformat', 'filetype'}},
- },
- inactive = {
- left = {{'readonly', 'filename', 'modified'}},
- right = {{'linenum'}, {'fileencoding', 'fileformat', 'filetype'}},
- },
- component_function = {
- mode = 'Lightline_mode',
- linenum = 'Lightline_linenum',
- fileformat = 'Lightline_fileformat',
- },
- mode_map = {
- n = 'N',
- i = 'I',
- R = 'R',
- v = 'V',
- V = 'V-L',
- [vimrc.term("<C-v>")] = 'V-B',
- c = 'C',
- s = 'S',
- S = 'S-L',
- [vimrc.term("<C-s>")] = 'S-B',
- t = 'T',
- },
- tabline = {
- left = {{'tabs'}},
- right = {},
- },
- tab = {
- active = {'tabnum', 'filename', 'modified'},
- inactive = {'tabnum', 'filename', 'modified'},
- },
-}
-
-
-
-
-- vim-lsp {{{2
-- TODO
diff --git a/.vimrc b/.vimrc
index 29f7214..884dd7e 100644
--- a/.vimrc
+++ b/.vimrc
@@ -438,9 +438,6 @@ Plug 'LeafCage/foldCC.vim'
" Show indent.
Plug 'Yggdroot/indentLine'
-" Cool status line.
-Plug 'itchyny/lightline.vim'
-
" Highlight matched parentheses.
Plug 'itchyny/vim-parenmatch'
@@ -594,28 +591,6 @@ endfunction
-Autocmd ColorScheme ocean call s:extra_highlight()
-
-
-function! s:extra_highlight() abort
- if &background != 'dark'
- return
- endif
-
- hi! link YankRoundRegion DiffChange
-
- hi! link OperatorSandwichBuns DiffChange
- hi! link OperatorSandwichStuff DiffChange
- hi! link OperatorSandwichDelete DiffChange
- hi! link OperatorSandwichAdd OperatorSandwichBuns
-
- hi EasyMotionShade guifg=#4d4d4d guibg=NONE gui=NONE cterm=NONE
- hi EasyMotionTarget guifg=#ff7100 guibg=NONE gui=underline cterm=underline
- hi! link EasyMotionMoveHL IncSearch
-endfunction
-
-
-
" Mappings {{{1
@@ -1199,7 +1174,9 @@ endfunction
-" Color scheme {{{1
+" Appearance {{{1
+
+" Color scheme {{{2
" A command which changes color scheme with fall back.
command! -bang -nargs=?
@@ -1221,10 +1198,202 @@ function! s:colorscheme(bang, name) abort
endfunction
+function! s:extra_highlight() abort
+ if &background != 'dark'
+ return
+ endif
+
+ hi! link YankRoundRegion DiffChange
+
+ hi! link OperatorSandwichBuns DiffChange
+ hi! link OperatorSandwichStuff DiffChange
+ hi! link OperatorSandwichDelete DiffChange
+ hi! link OperatorSandwichAdd OperatorSandwichBuns
+
+ hi EasyMotionShade guifg=#4d4d4d guibg=NONE gui=NONE cterm=NONE
+ hi EasyMotionTarget guifg=#ff7100 guibg=NONE gui=underline cterm=underline
+ hi! link EasyMotionMoveHL IncSearch
+
+ hi statusLineModeNormal guifg=NONE guibg=NONE gui=bold cterm=bold
+ hi statusLineModeInsert guifg=NONE guibg=NONE gui=bold cterm=bold
+ hi statusLineModeVisual guifg=NONE guibg=NONE gui=bold cterm=bold
+ hi statusLineModeOperator guifg=NONE guibg=NONE gui=bold cterm=bold
+ hi statusLineModeReplace guifg=NONE guibg=NONE gui=bold cterm=bold
+ hi statusLineModeCommand guifg=NONE guibg=NONE gui=bold cterm=bold
+ hi statusLineModeTerminal guifg=NONE guibg=NONE gui=bold cterm=bold
+ hi statusLineModeOther guifg=NONE guibg=NONE gui=bold cterm=bold
+ hi statusLineLeft guifg=#b7b7b7 guibg=#606060 gui=NONE cterm=NONE
+ hi statusLineRight guifg=#b7b7b7 guibg=#606060 gui=NONE cterm=NONE
+endfunction
+
+
+Autocmd ColorScheme ocean call s:extra_highlight()
+
+
ColorScheme! ocean
+" Statusline {{{2
+
+set statusline=%!Statusline_build()
+
+function! Statusline_build() abort
+ let winid = g:statusline_winid
+ let bufnr = winbufnr(winid)
+ let is_active = winid ==# win_getid()
+ if is_active
+ let [mode, mode_hl] = s:statusline_mode()
+ let ro = s:statusline_readonly(bufnr)
+ let fname = s:statusline_filename(bufnr)
+ let mod = s:statusline_modified(bufnr)
+ let linenum = s:statusline_linenum(winid)
+ let fenc = s:statusline_fenc_ff(bufnr)
+ let ft = s:statusline_filetype(bufnr)
+ return printf(
+ \ '%%#statusLineMode%s# %s %%#statusLineLeft# %s%s%s %%#StatusLine#%%=%%#statusLineRight# %s | %s | %s ',
+ \ mode_hl,
+ \ mode,
+ \ empty(ro) ? '' : ro . ' ',
+ \ fname,
+ \ empty(mod) ? '' : ' ' . mod,
+ \ linenum,
+ \ fenc,
+ \ ft)
+ else
+ let ro = s:statusline_readonly(bufnr)
+ let fname = s:statusline_filename(bufnr)
+ let mod = s:statusline_modified(bufnr)
+ let linenum = s:statusline_linenum(winid)
+ let fenc = s:statusline_fenc_ff(bufnr)
+ let ft = s:statusline_filetype(bufnr)
+ return printf(
+ \ '%%#statusLineLeft# %s%s%s %%#StatusLine#%%=%%#statusLineRight# %s | %s | %s ',
+ \ empty(ro) ? '' : ro . ' ',
+ \ fname,
+ \ empty(mod) ? '' : ' ' . mod,
+ \ linenum,
+ \ fenc,
+ \ ft)
+ endif
+endfunction
+
+function! s:statusline_mode() abort
+ const mode_map = {
+ \ 'n': ['N', 'Normal'],
+ \ 'no': ['O', 'Operator'],
+ \ 'nov': ['Oc', 'Operator'],
+ \ 'noV': ['Ol', 'Operator'],
+ \ "no\<C-v>": ['Ob', 'Operator'],
+ \ 'niI': ['In', 'Insert'],
+ \ 'niR': ['Rn', 'Replace'],
+ \ 'niV': ['Rn', 'Replace'],
+ \ 'v': ['V', 'Visual'],
+ \ 'V': ['Vl', 'Visual'],
+ \ "\<C-v>": ['Vb', 'Visual'],
+ \ 's': ['S', 'Visual'],
+ \ 'S': ['Sl', 'Visual'],
+ \ "\<C-s>": ['Sb', 'Visual'],
+ \ 'i': ['I', 'Insert'],
+ \ 'ic': ['I?', 'Insert'],
+ \ 'ix': ['I?', 'Insert'],
+ \ 'R': ['R', 'Replace'],
+ \ 'Rc': ['R?', 'Replace'],
+ \ 'Rv': ['R', 'Replace'],
+ \ 'Rx': ['R?', 'Replace'],
+ \ 'c': ['C', 'Command'],
+ \ 'cv': ['C', 'Command'],
+ \ 'ce': ['C', 'Command'],
+ \ 'r': ['-', 'Other'],
+ \ 'rm': ['-', 'Other'],
+ \ 'r?': ['-', 'Other'],
+ \ '!': ['-', 'Other'],
+ \ 't': ['T', 'Terminal'],
+ \ }
+ let [vim_mode, hl] = get(mode_map, mode(v:true), ['-', 'Other'])
+
+ " Calling `eskk#statusline()` makes Vim autoload eskk. If you call it
+ " without checking `g:loaded_autoload_eskk`, eskk is loaded on an early
+ " stage of the initialization (probably the first rendering of status line),
+ " which slows down Vim startup. Loading eskk can be delayed by checking both
+ " of `g:loaded_eskk` and `g:loaded_autoload_eskk`.
+ if exists('g:loaded_eskk') && exists('g:loaded_autoload_eskk')
+ let skk_mode = eskk#statusline(' (%s)', '')
+ else
+ let skk_mode = ''
+ endif
+
+ return [vim_mode . skk_mode, hl]
+endfunction
+
+function! s:statusline_readonly(bufnr) abort
+ let ro = getbufvar(a:bufnr, '&readonly')
+ return ro ? '[RO]' : ''
+endfunction
+
+function! s:statusline_filename(bufnr) abort
+ let name = bufname(a:bufnr)
+ return empty(name) ? '[No Name]' : name
+endfunction
+
+function! s:statusline_modified(bufnr) abort
+ let mod = getbufvar(a:bufnr, '&modified')
+ let ma = getbufvar(a:bufnr, '&modifiable')
+ if mod
+ return '[+]'
+ elseif ma
+ return ''
+ else
+ return '[-]'
+ endif
+endfunction
+
+function! s:statusline_linenum(winid) abort
+ return line('.', a:winid) . '/' . line('$', a:winid)
+endfunction
+
+function! s:statusline_fenc_ff(bufnr) abort
+ let fenc = getbufvar(a:bufnr, '&fileencoding')
+ let ff = getbufvar(a:bufnr, '&fileformat')
+ let bom = getbufvar(a:bufnr, '&bomb') " BOMB!!
+
+ if fenc ==# ''
+ let fencs = split(&fileencodings, ',')
+ let fenc = get(fencs, 0, &encoding)
+ elseif fenc ==# 'utf-8'
+ let fenc = bom ? 'U8[BOM]' : 'U8'
+ elseif fenc ==# 'utf-16'
+ let fenc = 'U16[BE]'
+ elseif fenc ==# 'utf-16le'
+ let fenc = 'U16[LE]'
+ elseif fenc ==# 'ucs-4'
+ let fenc = 'U32[BE]'
+ elseif fenc ==# 'ucs-4le'
+ let fenc = 'U32[LE]'
+ else
+ let fenc = toupper(fenc)
+ endif
+
+ if ff ==# 'unix'
+ let ff = ''
+ elseif ff ==# 'dos'
+ let ff = ' (CRLF)'
+ elseif ff ==# 'mac'
+ let ff = ' (CR)'
+ else
+ let ff = ' (Unknown)'
+ endif
+
+ return fenc . ff
+endfunction
+
+function! s:statusline_filetype(bufnr) abort
+ let ft = getbufvar(a:bufnr, '&filetype')
+ return empty(ft) ? '[None]' : ft
+endfunction
+
+
+
" Plugins configuration {{{1
@@ -1515,76 +1684,6 @@ xmap gJ <Plug>(jplus-input)
-" lightline {{{2
-
-let g:lightline = {
- \ 'colorscheme': 'jellybeans',
- \ 'active': {
- \ 'left': [['mode', 'paste'], ['readonly', 'filename', 'modified']],
- \ 'right': [['linenum'], ['fileencoding', 'fileformat', 'filetype']]
- \ },
- \ 'inactive': {
- \ 'left': [['readonly', 'filename', 'modified']],
- \ 'right': [['linenum'], ['fileencoding', 'fileformat', 'filetype']]
- \ },
- \ 'component_function': {
- \ 'mode': 'Lightline_mode',
- \ 'linenum': 'Lightline_linenum',
- \ 'fileformat': 'Lightline_fileformat',
- \ },
- \ 'mode_map': {
- \ 'n': 'N',
- \ 'i': 'I',
- \ 'R': 'R',
- \ 'v': 'V',
- \ 'V': 'V-L',
- \ "\<C-v>": 'V-B',
- \ 'c': 'C',
- \ 's': 'S',
- \ 'S': 'S-L',
- \ "\<C-s>": 'S-B',
- \ 't': 'T',
- \ },
- \ 'tabline': {
- \ 'left': [['tabs']],
- \ 'right': [],
- \ },
- \ 'tab': {
- \ 'active': ['tabnum', 'filename', 'modified'],
- \ 'inactive': ['tabnum', 'filename', 'modified'],
- \ },
- \ }
-
-function! Lightline_mode()
- " Calling `eskk#statusline()` makes Vim autoload eskk. If you call it
- " without checking `g:loaded_autoload_eskk`, eskk is loaded on an early
- " stage of the initialization (probably the first rendering of status line),
- " which slows down Vim startup. Loading eskk can be delayed by checking both
- " of `g:loaded_eskk` and `g:loaded_autoload_eskk`.
- if exists('g:loaded_eskk') && exists('g:loaded_autoload_eskk')
- let skk = eskk#statusline(' (%s)', '')
- else
- let skk = ''
- endif
- return lightline#mode() . skk
-endfunction
-
-function! Lightline_linenum()
- return line('.') . '/' . line('$')
-endfunction
-
-function! Lightline_fileformat()
- if &fileformat ==# 'unix'
- return 'LF'
- elseif &fileformat ==# 'dos'
- return 'CRLF'
- elseif &fileformat ==# 'mac'
- return 'CR'
- else
- return '-'
- endif
-endfunction
-
" vim-lsp {{{2