diff options
Diffstat (limited to 'vim/init/style.vim')
-rw-r--r-- | vim/init/style.vim | 291 |
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 | " 总是显示状态栏 | ||
17 | set laststatus=2 | ||
18 | |||
19 | " 总是显示行号 | ||
20 | set number | ||
21 | |||
22 | " 总是显示侧边栏(用于显示 mark/gitdiff/诊断信息) | ||
23 | set signcolumn=yes | ||
24 | |||
25 | " 总是显示标签栏 | ||
26 | set showtabline=2 | ||
27 | |||
28 | " 设置显示制表符等隐藏字符 | ||
29 | set list | ||
30 | |||
31 | " 右下角显示命令 | ||
32 | set showcmd | ||
33 | |||
34 | " 插入模式在状态栏下面显示 -- INSERT --, | ||
35 | " 先注释掉,默认已经为真了,如果这里再设置一遍会影响 echodoc 插件 | ||
36 | " set showmode | ||
37 | |||
38 | " 水平切割窗口时,默认在右边显示新窗口 | ||
39 | set splitright | ||
40 | |||
41 | |||
42 | "---------------------------------------------------------------------- | ||
43 | " 颜色主题:色彩文件位于 colors 目录中 | ||
44 | "---------------------------------------------------------------------- | ||
45 | |||
46 | " 设置黑色背景 | ||
47 | set background=dark | ||
48 | |||
49 | " 允许 256 色 | ||
50 | set t_Co=256 | ||
51 | |||
52 | " 设置颜色主题,会在所有 runtimepaths 的 colors 目录寻找同名配置 | ||
53 | " color desert256 | ||
54 | |||
55 | |||
56 | "---------------------------------------------------------------------- | ||
57 | " 状态栏设置 | ||
58 | "---------------------------------------------------------------------- | ||
59 | set statusline= " 清空状态了 | ||
60 | set statusline+=\ %F " 文件名 | ||
61 | set statusline+=\ [%1*%M%*%n%R%H] " buffer 编号和状态 | ||
62 | set statusline+=%= " 向右对齐 | ||
63 | set statusline+=\ %y " 文件类型 | ||
64 | |||
65 | " 最右边显示文件编码和行号等信息,并且固定在一个 group 中,优先占位 | ||
66 | set statusline+=\ %0(%{&fileformat}\ [%{(&fenc==\"\"?&enc:&fenc).(&bomb?\",BOM\":\"\")}]\ %v:%l/%L%) | ||
67 | |||
68 | |||
69 | "---------------------------------------------------------------------- | ||
70 | " 更改样式 | ||
71 | "---------------------------------------------------------------------- | ||
72 | |||
73 | " 更清晰的错误标注:默认一片红色背景,语法高亮都被搞没了 | ||
74 | " 只显示红色或者蓝色下划线或者波浪线 | ||
75 | hi! clear SpellBad | ||
76 | hi! clear SpellCap | ||
77 | hi! clear SpellRare | ||
78 | hi! clear SpellLocal | ||
79 | if 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 | ||
84 | else | ||
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 | ||
89 | endif | ||
90 | |||
91 | " 去掉 sign column 的白色背景 | ||
92 | hi! SignColumn guibg=NONE ctermbg=NONE | ||
93 | |||
94 | " 修改行号为浅灰色,默认主题的黄色行号很难看,换主题可以仿照修改 | ||
95 | highlight LineNr term=bold cterm=NONE ctermfg=DarkGrey ctermbg=NONE | ||
96 | \ gui=NONE guifg=DarkGrey guibg=NONE | ||
97 | |||
98 | " 修正补全目录的色彩:默认太难看 | ||
99 | hi! Pmenu guibg=gray guifg=black ctermbg=gray ctermfg=black | ||
100 | hi! PmenuSel guibg=gray guifg=brown ctermbg=brown ctermfg=gray | ||
101 | |||
102 | |||
103 | "---------------------------------------------------------------------- | ||
104 | " 终端设置,隐藏行号和侧边栏 | ||
105 | "---------------------------------------------------------------------- | ||
106 | if 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 | ||
113 | endif | ||
114 | |||
115 | |||
116 | "---------------------------------------------------------------------- | ||
117 | " quickfix 设置,隐藏行号 | ||
118 | "---------------------------------------------------------------------- | ||
119 | augroup VimInitStyle | ||
120 | au! | ||
121 | au FileType qf setlocal nonumber | ||
122 | augroup END | ||
123 | |||
124 | |||
125 | "---------------------------------------------------------------------- | ||
126 | " 标签栏文字风格:默认为零,GUI 模式下空间大,按风格 3显示 | ||
127 | " 0: filename.txt | ||
128 | " 2: 1 - filename.txt | ||
129 | " 3: [1] filename.txt | ||
130 | "---------------------------------------------------------------------- | ||
131 | if has('gui_running') | ||
132 | let g:config_vim_tab_style = 3 | ||
133 | endif | ||
134 | |||
135 | |||
136 | "---------------------------------------------------------------------- | ||
137 | " 终端下的 tabline | ||
138 | "---------------------------------------------------------------------- | ||
139 | function! 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 | ||
165 | endfunc | ||
166 | |||
167 | |||
168 | "---------------------------------------------------------------------- | ||
169 | " 需要显示到标签上的文件名 | ||
170 | "---------------------------------------------------------------------- | ||
171 | function! 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 | ||
205 | endfunc | ||
206 | |||
207 | |||
208 | "---------------------------------------------------------------------- | ||
209 | " 标签栏文字,使用 [1] filename 的模式 | ||
210 | "---------------------------------------------------------------------- | ||
211 | function! 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 | ||
229 | endfunc | ||
230 | |||
231 | |||
232 | "---------------------------------------------------------------------- | ||
233 | " GUI 下的标签文字,使用 [1] filename 的模式 | ||
234 | "---------------------------------------------------------------------- | ||
235 | function! 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 | ||
253 | endfunc | ||
254 | |||
255 | |||
256 | |||
257 | "---------------------------------------------------------------------- | ||
258 | " 设置 GUI 标签的 tips: 显示当前标签有哪些窗口 | ||
259 | "---------------------------------------------------------------------- | ||
260 | function! 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 | ||
280 | endfunc | ||
281 | |||
282 | |||
283 | "---------------------------------------------------------------------- | ||
284 | " 标签栏最终设置 | ||
285 | "---------------------------------------------------------------------- | ||
286 | set tabline=%!Vim_NeatTabLine() | ||
287 | set guitablabel=%{Vim_NeatGuiTabLabel()} | ||
288 | set guitabtooltip=%{Vim_NeatGuiTabTip()} | ||
289 | |||
290 | |||
291 | |||