是否可以打开以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()
答案 0 :(得分:5)
这与被问及的here相反。
帮助有一个类似不同标签宽度用例的示例,请参阅: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
再次关闭此功能。这样,您可以轻松地打开/关闭此功能。为了便于使用,我将它放在一个函数中并定义一个调用它的自定义命令。