From 76922c395db1d9745e2a47f8c0584545958a3fee Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Wed, 22 May 2024 13:57:46 +0800 Subject: Update --- vim/init/style.vim | 291 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 291 insertions(+) create mode 100644 vim/init/style.vim (limited to 'vim/init/style.vim') diff --git a/vim/init/style.vim b/vim/init/style.vim new file mode 100644 index 0000000..8d056b0 --- /dev/null +++ b/vim/init/style.vim @@ -0,0 +1,291 @@ +"====================================================================== +" +" init-style.vim - 显示样式设置 +" +" Created by skywind on 2018/05/30 +" Last Modified: 2018/05/30 20:29:07 +" +"====================================================================== +" vim: set ts=4 sw=4 tw=78 noet : + + +"---------------------------------------------------------------------- +" 显示设置 +"---------------------------------------------------------------------- + +" 总是显示状态栏 +set laststatus=2 + +" 总是显示行号 +set number + +" 总是显示侧边栏(用于显示 mark/gitdiff/诊断信息) +set signcolumn=yes + +" 总是显示标签栏 +set showtabline=2 + +" 设置显示制表符等隐藏字符 +set list + +" 右下角显示命令 +set showcmd + +" 插入模式在状态栏下面显示 -- INSERT --, +" 先注释掉,默认已经为真了,如果这里再设置一遍会影响 echodoc 插件 +" set showmode + +" 水平切割窗口时,默认在右边显示新窗口 +set splitright + + +"---------------------------------------------------------------------- +" 颜色主题:色彩文件位于 colors 目录中 +"---------------------------------------------------------------------- + +" 设置黑色背景 +set background=dark + +" 允许 256 色 +set t_Co=256 + +" 设置颜色主题,会在所有 runtimepaths 的 colors 目录寻找同名配置 +" color desert256 + + +"---------------------------------------------------------------------- +" 状态栏设置 +"---------------------------------------------------------------------- +set statusline= " 清空状态了 +set statusline+=\ %F " 文件名 +set statusline+=\ [%1*%M%*%n%R%H] " buffer 编号和状态 +set statusline+=%= " 向右对齐 +set statusline+=\ %y " 文件类型 + +" 最右边显示文件编码和行号等信息,并且固定在一个 group 中,优先占位 +set statusline+=\ %0(%{&fileformat}\ [%{(&fenc==\"\"?&enc:&fenc).(&bomb?\",BOM\":\"\")}]\ %v:%l/%L%) + + +"---------------------------------------------------------------------- +" 更改样式 +"---------------------------------------------------------------------- + +" 更清晰的错误标注:默认一片红色背景,语法高亮都被搞没了 +" 只显示红色或者蓝色下划线或者波浪线 +hi! clear SpellBad +hi! clear SpellCap +hi! clear SpellRare +hi! clear SpellLocal +if has('gui_running') + hi! SpellBad gui=undercurl guisp=red + hi! SpellCap gui=undercurl guisp=blue + hi! SpellRare gui=undercurl guisp=magenta + hi! SpellRare gui=undercurl guisp=cyan +else + hi! SpellBad term=standout ctermfg=1 term=underline cterm=underline + hi! SpellCap term=underline cterm=underline + hi! SpellRare term=underline cterm=underline + hi! SpellLocal term=underline cterm=underline +endif + +" 去掉 sign column 的白色背景 +hi! SignColumn guibg=NONE ctermbg=NONE + +" 修改行号为浅灰色,默认主题的黄色行号很难看,换主题可以仿照修改 +highlight LineNr term=bold cterm=NONE ctermfg=DarkGrey ctermbg=NONE + \ gui=NONE guifg=DarkGrey guibg=NONE + +" 修正补全目录的色彩:默认太难看 +hi! Pmenu guibg=gray guifg=black ctermbg=gray ctermfg=black +hi! PmenuSel guibg=gray guifg=brown ctermbg=brown ctermfg=gray + + +"---------------------------------------------------------------------- +" 终端设置,隐藏行号和侧边栏 +"---------------------------------------------------------------------- +if has('terminal') && exists(':terminal') == 2 + if exists('##TerminalOpen') + augroup VimUnixTerminalGroup + au! + au TerminalOpen * setlocal nonumber signcolumn=no + augroup END + endif +endif + + +"---------------------------------------------------------------------- +" quickfix 设置,隐藏行号 +"---------------------------------------------------------------------- +augroup VimInitStyle + au! + au FileType qf setlocal nonumber +augroup END + + +"---------------------------------------------------------------------- +" 标签栏文字风格:默认为零,GUI 模式下空间大,按风格 3显示 +" 0: filename.txt +" 2: 1 - filename.txt +" 3: [1] filename.txt +"---------------------------------------------------------------------- +if has('gui_running') + let g:config_vim_tab_style = 3 +endif + + +"---------------------------------------------------------------------- +" 终端下的 tabline +"---------------------------------------------------------------------- +function! Vim_NeatTabLine() + let s = '' + for i in range(tabpagenr('$')) + " select the highlighting + if i + 1 == tabpagenr() + let s .= '%#TabLineSel#' + else + let s .= '%#TabLine#' + endif + + " set the tab page number (for mouse clicks) + let s .= '%' . (i + 1) . 'T' + + " the label is made by MyTabLabel() + let s .= ' %{Vim_NeatTabLabel(' . (i + 1) . ')} ' + endfor + + " after the last tab fill with TabLineFill and reset tab page nr + let s .= '%#TabLineFill#%T' + + " right-align the label to close the current tab page + if tabpagenr('$') > 1 + let s .= '%=%#TabLine#%999XX' + endif + + return s +endfunc + + +"---------------------------------------------------------------------- +" 需要显示到标签上的文件名 +"---------------------------------------------------------------------- +function! Vim_NeatBuffer(bufnr, fullname) + let l:name = bufname(a:bufnr) + if getbufvar(a:bufnr, '&modifiable') + if l:name == '' + return '[No Name]' + else + if a:fullname + return fnamemodify(l:name, ':p') + else + let aname = fnamemodify(l:name, ':p') + let sname = fnamemodify(aname, ':t') + if sname == '' + let test = fnamemodify(aname, ':h:t') + if test != '' + return '<'. test . '>' + endif + endif + return sname + endif + endif + else + let l:buftype = getbufvar(a:bufnr, '&buftype') + if l:buftype == 'quickfix' + return '[Quickfix]' + elseif l:name != '' + if a:fullname + return '-'.fnamemodify(l:name, ':p') + else + return '-'.fnamemodify(l:name, ':t') + endif + else + endif + return '[No Name]' + endif +endfunc + + +"---------------------------------------------------------------------- +" 标签栏文字,使用 [1] filename 的模式 +"---------------------------------------------------------------------- +function! Vim_NeatTabLabel(n) + let l:buflist = tabpagebuflist(a:n) + let l:winnr = tabpagewinnr(a:n) + let l:bufnr = l:buflist[l:winnr - 1] + let l:fname = Vim_NeatBuffer(l:bufnr, 0) + let l:num = a:n + let style = get(g:, 'config_vim_tab_style', 0) + if style == 0 + return l:fname + elseif style == 1 + return "[".l:num."] ".l:fname + elseif style == 2 + return "".l:num." - ".l:fname + endif + if getbufvar(l:bufnr, '&modified') + return "[".l:num."] ".l:fname." +" + endif + return "[".l:num."] ".l:fname +endfunc + + +"---------------------------------------------------------------------- +" GUI 下的标签文字,使用 [1] filename 的模式 +"---------------------------------------------------------------------- +function! Vim_NeatGuiTabLabel() + let l:num = v:lnum + let l:buflist = tabpagebuflist(l:num) + let l:winnr = tabpagewinnr(l:num) + let l:bufnr = l:buflist[l:winnr - 1] + let l:fname = Vim_NeatBuffer(l:bufnr, 0) + let style = get(g:, 'config_vim_tab_style', 0) + if style == 0 + return l:fname + elseif style == 1 + return "[".l:num."] ".l:fname + elseif style == 2 + return "".l:num." - ".l:fname + endif + if getbufvar(l:bufnr, '&modified') + return "[".l:num."] ".l:fname." +" + endif + return "[".l:num."] ".l:fname +endfunc + + + +"---------------------------------------------------------------------- +" 设置 GUI 标签的 tips: 显示当前标签有哪些窗口 +"---------------------------------------------------------------------- +function! Vim_NeatGuiTabTip() + let tip = '' + let bufnrlist = tabpagebuflist(v:lnum) + for bufnr in bufnrlist + " separate buffer entries + if tip != '' + let tip .= " \n" + endif + " Add name of buffer + let name = Vim_NeatBuffer(bufnr, 1) + let tip .= name + " add modified/modifiable flags + if getbufvar(bufnr, "&modified") + let tip .= ' [+]' + endif + if getbufvar(bufnr, "&modifiable")==0 + let tip .= ' [-]' + endif + endfor + return tip +endfunc + + +"---------------------------------------------------------------------- +" 标签栏最终设置 +"---------------------------------------------------------------------- +set tabline=%!Vim_NeatTabLine() +set guitablabel=%{Vim_NeatGuiTabLabel()} +set guitabtooltip=%{Vim_NeatGuiTabTip()} + + + -- cgit v1.2.3-70-g09d2