1

2つのスペースでインデントされているファイルを開くことはできますが、4つのスペースのインデントが表示され、4つのスペースを作成すると、2つのスペース形式で保存されますか?

編集

また、ファイルにタブ、2つのスペース、および4つのスペースが混在している場合でも、確実に機能するようにする必要があります。

編集2

だから、これが私の現在の解決策です。カーソルを元の場所に戻すことができるように(元々:wにマップされていた)再マップする必要があります(保存時にカーソル位置まで1つの「履歴」を戻します。方法はありますか?カーソル位置に影響を与えずに(そして履歴に置換を追加せずに)これを行いますか?

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

それを2倍/半分のスペースに適応させる:

: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 に答える