(g)Vim - >显示4个空格,但保存2个空格(制表符)

Mr *_*kél 1 vim spaces

是否可以打开以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()
Run Code Online (Sandbox Code Playgroud)

Ing*_*kat 5

这与此处提出的内容相反.

该帮助有一个类似不同标签宽度的用例的例子,请参阅:help retab-example.

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

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

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

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

  • 你问空间,你有空间.标签使这更复杂,但可以解决.看看`:retab`. (2认同)