插入将自动删除的空格

时间:2012-11-07 10:10:49

标签: vim indentation

我使用以下代码使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不同,这会插入“真实”空格而不是“暂定”空格,如果在该行上没有输入任何内容,则会自动删除。

有没有办法插入这样的试验空间?

或许我想通过设置一些秘密选项来实现我想要实现的目标?

为清楚起见,删除所有尾随空格的插件不是解决方案。

3 个答案:

答案 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