" Statusline/Tabline
set laststatus=2 " 상태표시줄 항상 표시(ls)
set noshowmode " 상태표시줄에 모드정보 표시(smd)
set showtabline=2 " 탭페이지 목록 항상 표시
" Highlight
function! s:Highlights() abort
highlight Normal ctermbg=NONE guibg=NONE " 기본 배경 투명 처리
highlight LineNr ctermbg=NONE guibg=NONE " 줄번호 배경 투명 처리
highlight CursorLine ctermbg=238 ctermfg=NONE guibg=#313244 " 커서라인 배경색
highlight CursorLineNr ctermbg=238 ctermfg=NONE guibg=#313244 " 현재 줄번호 배경
highlight ExtraWhitespace ctermfg=red guifg=red " 잔여 공백문자 색상
highlight NonText ctermfg=red guifg=red " 화면표시용 문자 색상
highlight EndOfBuffer ctermbg=NONE guibg=NONE " EndOfBuffer 배경색
" Statusline
highlight StlNormal ctermfg=0 ctermbg=4 guifg=#1e1e2e guibg=#89b4fa
highlight StlInsert ctermfg=0 ctermbg=2 guifg=#1e1e2e guibg=#a6e3a1
highlight StlVisual ctermfg=0 ctermbg=5 guifg=#1e1e2e guibg=#cba6f7
highlight StlReplace ctermfg=0 ctermbg=1 guifg=#1e1e2e guibg=#f38ba8
highlight StlCommand ctermfg=0 ctermbg=3 guifg=#1e1e2e guibg=#f9e2af
highlight StlOther ctermfg=0 ctermbg=6 guifg=#1e1e2e guibg=#94e2d5
highlight StlFile ctermfg=7 ctermbg=8 guifg=#cdd6f4 guibg=#313244
" Tabline
highlight TlSel ctermfg=0 ctermbg=4 guifg=#1e1e2e guibg=#89b4fa gui=bold
highlight TlNorm ctermfg=7 ctermbg=8 guifg=#cdd6f4 guibg=#313244
highlight TlFill ctermfg=7 ctermbg=0 guifg=#6c7086 guibg=#181825
endfunction
" Statusline/설정
let s:modes = {
\ 'n': ['NORMAL', 'StlNormal'],
\ 'i': ['INSERT', 'StlInsert'],
\ 'v': ['VISUAL', 'StlVisual'],
\ 'V': ['V-LINE', 'StlVisual'],
\ "\<C-v>": ['V-BLOCK', 'StlVisual'],
\ 'R': ['REPLACE', 'StlReplace'],
\ 'c': ['COMMAND', 'StlCommand'],
\ 't': ['TERMINAL', 'StlOther'],
\ }
function! StlFilesize() abort
let s = getfsize(expand('%:p'))
if s < 0 | return '' | endif
let u = ['B', 'K', 'M', 'G']
let i = 0
let s = s * 1.0
while s >= 1024 && i < 3
let s = s / 1024
let i += 1
endwhile
return printf('%.1f%s', s, u[i])
endfunction
function! StlFormat() abort
return &fileformat
endfunction
function! StlEncoding() abort
let enc = &fileencoding !=# '' ? &fileencoding : &encoding
return &bomb ? enc . 'ᵇ' : enc
endfunction
function! Stl() abort
if g:statusline_winid != win_getid()
return '%#StatusLineNC# %f %m%r'
endif
let m = mode()
let [name, hl] = get(s:modes, m, [m, 'StlOther'])
let pct = line('$') > 0 ? line('.') * 100 / line('$') : 0
return '%#' . hl . '# ' . name . ' '
\ . '%#StlFile#%< %f %m%r'
\ . '%='
\ . ' ' . StlFormat() . ' ' . StlEncoding() . ' ' . StlFilesize() . ' '
\ . '%#' . hl . '# ' . line('.') . ':' . col('.')
\ . ' ' . printf('%d%%%%', pct) . ' '
endfunction
set statusline=%!Stl()
" Tabline/설정
let s:sup = ['⁰','¹','²','³','⁴','⁵','⁶','⁷','⁸','⁹']
function! s:Super(n) abort
return join(map(split(string(a:n), '\zs'), 's:sup[v:val]'), '')
endfunction
function! Tl() abort
let cur = bufnr('%')
let s = ''
let idx = 0
for b in range(1, bufnr('$'))
if !buflisted(b) | continue | endif
let idx += 1
let name = fnamemodify(bufname(b), ':t')
let name = name ==# '' ? '[No Name]' : substitute(name, '%', '%%', 'g')
let mod = getbufvar(b, '&modified') ? '+' : ''
let hl = b == cur ? '%#TlSel#' : '%#TlNorm#'
let s .= hl . ' ' . s:Super(idx) . name . mod . ' '
endfor
return s . '%#TlFill#'
endfunction
set tabline=%!Tl()
" <leader>1-9: N번째 버퍼로 이동
function! GotoBuf(n) abort
let bufs = getbufinfo({'buflisted': 1})
if a:n <= len(bufs)
execute 'buffer' bufs[a:n - 1].bufnr
endif
endfunction
for i in range(1, 9)
execute 'nnoremap <silent> <leader>' . i . ' :call GotoBuf(' . i . ')<CR>'
endfor
" 컬러스킴 실행시 사용자 하일라이트 다시 적용
augroup Highlights
autocmd!
autocmd ColorScheme * call <SID>Highlights()
augroup END
call s:Highlights()
