1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
|
"======================================================================
"
" 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 :
colorscheme desert
"----------------------------------------------------------------------
" 显示设置
"----------------------------------------------------------------------
" 总是显示侧边栏(用于显示 mark/gitdiff/诊断信息)
" 总是显示标签栏
set showtabline=2
" 设置显示制表符等隐藏字符
set list
" 右下角显示命令
set showcmd
" 插入模式在状态栏下面显示 -- INSERT --,
" 先注释掉,默认已经为真了,如果这里再设置一遍会影响 echodoc 插件
" set showmode
" 水平切割窗口时,默认在右边显示新窗口
"----------------------------------------------------------------------
" 颜色主题:色彩文件位于 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
"----------------------------------------------------------------------
" 标签栏文字风格:默认为零,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()}
|