1

是否可以打开缩进 2 个空格的文件,但显示 4 个空格缩进,当我创建 4 个空格时,它以 2 个空格格式保存?

编辑

事实证明,如果文件混合了制表符、2 个空格和 4 个空格,我还需要能够确保它能够正常工作。

编辑 2

所以,这是我目前的解决方案。我必须重新映射我的(最初映射到:w),以便我可以将光标放回原来的位置(并在我进行保存时给我一个“历史记录”,直到光标位置。有没有办法在不影响光标位置的情况下执行此操作(也不将替换添加到历史记录中)?

function! s:ShimSpaces()
    nunmap <C-S>
    nmap <C-S> ms``mt:w<Cr>`t`s
    augroup SeoTabs
        autocmd!
        autocmd BufReadPost,BufWritePost * set tabstop=4
        autocmd BufReadPost,BufWritePost * %substitute/^ \+/&&/e
        autocmd BufReadPost              * %substitute/ \+$//e
        autocmd BufWritePre              * %substitute/^\( \+\)\1/\1/e
        autocmd BufWritePre              * set tabstop=2
        autocmd BufWritePre              * retab
    augroup END
endfunction
command! -n=0 -bar ShimSpaces :call s:ShimSpaces()
4

1 回答 1

6

这与这里所问的相反。

该帮助有一个关于不同选项卡宽度的类似用例的示例,请参阅:help retab-example

使其适应加倍/减半空间:

:augroup AdaptIndent
    :autocmd!
    :autocmd BufReadPost,BufWritePost  * %substitute/^ \+/&&/e
    :autocmd BufWritePre               * %substitute/^\( \+\)\1/\1/e
:augroup END

使用*,这将影响所有打开的文件。要将其限制为某些文件,请参阅:help autocmd-patterns

编辑:使用:augroup包装,这可以通过:autocmd! AdaptIndent. 这样,您可以轻松地打开/关闭它。为了便于使用,我将它放在一个函数中并定义一个调用它的自定义命令。

于 2013-01-25T07:38:44.630 回答