我使用以下代码使cc
在行不为空时保留现有的缩进,并在行为空时使用计算的缩进(使用indentexpr
)。
function SmartCC()
if getline('.') !~# '\S'
return 'cc'
else
let spaces = repeat(' ', indent('.'))
return '0d$i' . spaces
endif
endfunction
nnoremap <expr> cc SmartCC()
我遇到的唯一问题是,与内置cc
不同,这会插入“真实”空格而不是“暂定”空格,如果在该行上没有输入任何内容,则会自动删除。
有没有办法插入这样的试验空间?
或许我想通过设置一些秘密选项来实现我想要实现的目标?
为清楚起见,删除所有尾随空格的插件不是解决方案。
答案 0 :(得分:1)
尝试以下黑客攻击:
function SmartCC_IndentExpr(indent, savedindentexpr)
let &l:indentexpr=a:savedindentexpr
return a:indent
endfunction
function SmartCC()
if getline('.')=~#'\S'
let &l:indentexpr='SmartCC_IndentExpr('.indent('.').', '.string(&l:indentexpr).')'
endif
return 'cc'
endfunction
nnoremap <expr> cc SmartCC()
。我们的想法是仅在评估期&l:indentexpr
设置cc
。众所周知,cc
只检查缩进一次,在这种情况下没有任何内容触发cc
之前的检查,然后{1}}本身可用于在缩进之前恢复&l:indentexpr
由于其他原因第二次检查。
答案 1 :(得分:0)
cc
已足够聪明,可以保留当前行的缩进。你有autoindent
吗?
答案 2 :(得分:0)
我不能谈论按需空间剥离,但我有这个删除保存的尾随空格,也许这对你来说足够了?
autocmd BufWritePre *.{c,cpp,h} %s/\s\+$//e