aboutsummaryrefslogtreecommitdiffhomepage
path: root/vim/init/style.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim/init/style.vim')
-rw-r--r--vim/init/style.vim291
1 files changed, 291 insertions, 0 deletions
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 @@
1"======================================================================
2"
3" init-style.vim - 显示样式设置
4"
5" Created by skywind on 2018/05/30
6" Last Modified: 2018/05/30 20:29:07
7"
8"======================================================================
9" vim: set ts=4 sw=4 tw=78 noet :
10
11
12"----------------------------------------------------------------------
13" 显示设置
14"----------------------------------------------------------------------
15
16" 总是显示状态栏
17set laststatus=2
18
19" 总是显示行号
20set number
21
22" 总是显示侧边栏(用于显示 mark/gitdiff/诊断信息)
23set signcolumn=yes
24
25" 总是显示标签栏
26set showtabline=2
27
28" 设置显示制表符等隐藏字符
29set list
30
31" 右下角显示命令
32set showcmd
33
34" 插入模式在状态栏下面显示 -- INSERT --,
35" 先注释掉,默认已经为真了,如果这里再设置一遍会影响 echodoc 插件
36" set showmode
37
38" 水平切割窗口时,默认在右边显示新窗口
39set splitright
40
41
42"----------------------------------------------------------------------
43" 颜色主题:色彩文件位于 colors 目录中
44"----------------------------------------------------------------------
45
46" 设置黑色背景
47set background=dark
48
49" 允许 256 色
50set t_Co=256
51
52" 设置颜色主题,会在所有 runtimepaths 的 colors 目录寻找同名配置
53" color desert256
54
55
56"----------------------------------------------------------------------
57" 状态栏设置
58"----------------------------------------------------------------------
59set statusline= " 清空状态了
60set statusline+=\ %F " 文件名
61set statusline+=\ [%1*%M%*%n%R%H] " buffer 编号和状态
62set statusline+=%= " 向右对齐
63set statusline+=\ %y " 文件类型
64
65" 最右边显示文件编码和行号等信息,并且固定在一个 group 中,优先占位
66set statusline+=\ %0(%{&fileformat}\ [%{(&fenc==\"\"?&enc:&fenc).(&bomb?\",BOM\":\"\")}]\ %v:%l/%L%)
67
68
69"----------------------------------------------------------------------
70" 更改样式
71"----------------------------------------------------------------------
72
73" 更清晰的错误标注:默认一片红色背景,语法高亮都被搞没了
74" 只显示红色或者蓝色下划线或者波浪线
75hi! clear SpellBad
76hi! clear SpellCap
77hi! clear SpellRare
78hi! clear SpellLocal
79if has('gui_running')
80 hi! SpellBad gui=undercurl guisp=red
81 hi! SpellCap gui=undercurl guisp=blue
82 hi! SpellRare gui=undercurl guisp=magenta
83 hi! SpellRare gui=undercurl guisp=cyan
84else
85 hi! SpellBad term=standout ctermfg=1 term=underline cterm=underline
86 hi! SpellCap term=underline cterm=underline
87 hi! SpellRare term=underline cterm=underline
88 hi! SpellLocal term=underline cterm=underline
89endif
90
91" 去掉 sign column 的白色背景
92hi! SignColumn guibg=NONE ctermbg=NONE
93
94" 修改行号为浅灰色,默认主题的黄色行号很难看,换主题可以仿照修改
95highlight LineNr term=bold cterm=NONE ctermfg=DarkGrey ctermbg=NONE
96 \ gui=NONE guifg=DarkGrey guibg=NONE
97
98" 修正补全目录的色彩:默认太难看
99hi! Pmenu guibg=gray guifg=black ctermbg=gray ctermfg=black
100hi! PmenuSel guibg=gray guifg=brown ctermbg=brown ctermfg=gray
101
102
103"----------------------------------------------------------------------
104" 终端设置,隐藏行号和侧边栏
105"----------------------------------------------------------------------
106if has('terminal') && exists(':terminal') == 2
107 if exists('##TerminalOpen')
108 augroup VimUnixTerminalGroup
109 au!
110 au TerminalOpen * setlocal nonumber signcolumn=no
111 augroup END
112 endif
113endif
114
115
116"----------------------------------------------------------------------
117" quickfix 设置,隐藏行号
118"----------------------------------------------------------------------
119augroup VimInitStyle
120 au!
121 au FileType qf setlocal nonumber
122augroup END
123
124
125"----------------------------------------------------------------------
126" 标签栏文字风格:默认为零,GUI 模式下空间大,按风格 3显示
127" 0: filename.txt
128" 2: 1 - filename.txt
129" 3: [1] filename.txt
130"----------------------------------------------------------------------
131if has('gui_running')
132 let g:config_vim_tab_style = 3
133endif
134
135
136"----------------------------------------------------------------------
137" 终端下的 tabline
138"----------------------------------------------------------------------
139function! Vim_NeatTabLine()
140 let s = ''
141 for i in range(tabpagenr('$'))
142 " select the highlighting
143 if i + 1 == tabpagenr()
144 let s .= '%#TabLineSel#'
145 else
146 let s .= '%#TabLine#'
147 endif
148
149 " set the tab page number (for mouse clicks)
150 let s .= '%' . (i + 1) . 'T'
151
152 " the label is made by MyTabLabel()
153 let s .= ' %{Vim_NeatTabLabel(' . (i + 1) . ')} '
154 endfor
155
156 " after the last tab fill with TabLineFill and reset tab page nr
157 let s .= '%#TabLineFill#%T'
158
159 " right-align the label to close the current tab page
160 if tabpagenr('$') > 1
161 let s .= '%=%#TabLine#%999XX'
162 endif
163
164 return s
165endfunc
166
167
168"----------------------------------------------------------------------
169" 需要显示到标签上的文件名
170"----------------------------------------------------------------------
171function! Vim_NeatBuffer(bufnr, fullname)
172 let l:name = bufname(a:bufnr)
173 if getbufvar(a:bufnr, '&modifiable')
174 if l:name == ''
175 return '[No Name]'
176 else
177 if a:fullname
178 return fnamemodify(l:name, ':p')
179 else
180 let aname = fnamemodify(l:name, ':p')
181 let sname = fnamemodify(aname, ':t')
182 if sname == ''
183 let test = fnamemodify(aname, ':h:t')
184 if test != ''
185 return '<'. test . '>'
186 endif
187 endif
188 return sname
189 endif
190 endif
191 else
192 let l:buftype = getbufvar(a:bufnr, '&buftype')
193 if l:buftype == 'quickfix'
194 return '[Quickfix]'
195 elseif l:name != ''
196 if a:fullname
197 return '-'.fnamemodify(l:name, ':p')
198 else
199 return '-'.fnamemodify(l:name, ':t')
200 endif
201 else
202 endif
203 return '[No Name]'
204 endif
205endfunc
206
207
208"----------------------------------------------------------------------
209" 标签栏文字,使用 [1] filename 的模式
210"----------------------------------------------------------------------
211function! Vim_NeatTabLabel(n)
212 let l:buflist = tabpagebuflist(a:n)
213 let l:winnr = tabpagewinnr(a:n)
214 let l:bufnr = l:buflist[l:winnr - 1]
215 let l:fname = Vim_NeatBuffer(l:bufnr, 0)
216 let l:num = a:n
217 let style = get(g:, 'config_vim_tab_style', 0)
218 if style == 0
219 return l:fname
220 elseif style == 1
221 return "[".l:num."] ".l:fname
222 elseif style == 2
223 return "".l:num." - ".l:fname
224 endif
225 if getbufvar(l:bufnr, '&modified')
226 return "[".l:num."] ".l:fname." +"
227 endif
228 return "[".l:num."] ".l:fname
229endfunc
230
231
232"----------------------------------------------------------------------
233" GUI 下的标签文字,使用 [1] filename 的模式
234"----------------------------------------------------------------------
235function! Vim_NeatGuiTabLabel()
236 let l:num = v:lnum
237 let l:buflist = tabpagebuflist(l:num)
238 let l:winnr = tabpagewinnr(l:num)
239 let l:bufnr = l:buflist[l:winnr - 1]
240 let l:fname = Vim_NeatBuffer(l:bufnr, 0)
241 let style = get(g:, 'config_vim_tab_style', 0)
242 if style == 0
243 return l:fname
244 elseif style == 1
245 return "[".l:num."] ".l:fname
246 elseif style == 2
247 return "".l:num." - ".l:fname
248 endif
249 if getbufvar(l:bufnr, '&modified')
250 return "[".l:num."] ".l:fname." +"
251 endif
252 return "[".l:num."] ".l:fname
253endfunc
254
255
256
257"----------------------------------------------------------------------
258" 设置 GUI 标签的 tips: 显示当前标签有哪些窗口
259"----------------------------------------------------------------------
260function! Vim_NeatGuiTabTip()
261 let tip = ''
262 let bufnrlist = tabpagebuflist(v:lnum)
263 for bufnr in bufnrlist
264 " separate buffer entries
265 if tip != ''
266 let tip .= " \n"
267 endif
268 " Add name of buffer
269 let name = Vim_NeatBuffer(bufnr, 1)
270 let tip .= name
271 " add modified/modifiable flags
272 if getbufvar(bufnr, "&modified")
273 let tip .= ' [+]'
274 endif
275 if getbufvar(bufnr, "&modifiable")==0
276 let tip .= ' [-]'
277 endif
278 endfor
279 return tip
280endfunc
281
282
283"----------------------------------------------------------------------
284" 标签栏最终设置
285"----------------------------------------------------------------------
286set tabline=%!Vim_NeatTabLine()
287set guitablabel=%{Vim_NeatGuiTabLabel()}
288set guitabtooltip=%{Vim_NeatGuiTabTip()}
289
290
291