编辑缩进嵌套的文件时想找到对应的层级比较困难,写了一个函数,使用cc选项设定一条辅助线,标识到指定的缩进层级。代码如下:
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
|
" --------------------------------------------------
" [参考线切换] {{{
" --------------------------------------------------
fu
! ReferenceLine(t)
if
exists(
'w:ccnum'
)
let
ccnum=w:ccnum
elsei
exists(
'b:ccnum'
)
let
ccnum=b:ccnum
else
let
ccnum=0
en
let
oldcc=ccnum
" let ccc=&cc
" ec oldcc
let
ccc=
','
.&
cc
.
','
" add/sub
if
a:t==
'add'
|| a:t==
'sub'
" check old cc
if
match
(ccc,
','
.oldcc.
','
)<0
let
oldcc=0
let
ccnum=0
en
" step
let
csw=&
sw
if
a:t==
'add'
let
ccnum=ccnum + csw
elsei
a:t==
'sub'
let
ccnum=ccnum - csw
if
ccnum < 0 |
let
ccnum=0 |
en
en
if
oldcc > 0 |
let
ccc=substitute(ccc,
','
.oldcc.
','
,
','
,
''
) |
en
let
ccc=ccc.ccnum
" ec ccc
" ec ccnum
let
ccc=substitute(ccc,
'^0,\|,0,\|,0$'
,
','
,
'g'
)
let
ccc=substitute(ccc,
'^,\+\|,\+$'
,
''
,
'g'
)
" ec ccc
let
w:ccnum=ccnum
let
b:ccnum=ccnum
exec
"setl cc="
.ccc
" del
elsei
a:t==
'del'
let
ccc=substitute(ccc,
','
.oldcc.
','
,
','
,
''
)
let
ccc=substitute(ccc,
'^,\+\|,\+$'
,
''
,
'g'
)
" ec ccc
let
w:ccnum=0
let
b:ccnum=0
exec
"setl cc="
.ccc
en
endf
nn
<silent>
<A-u>
:
call
ReferenceLine(
'sub'
)
<CR>
nn
<silent>
<A-o>
:
call
ReferenceLine(
'add'
)
<CR>
" }}}
|
使用方法:
Alt+o 增加参考线、Alt+u 减少参考线,最后两行是键映射,可以按照需求自行修改。
设定参考线后,如果想要设定cc做列宽参照,请使用set cc+=<num>来设定。
效果如下:左侧的是缩进辅助线,右侧的是手动设置的列宽参照。