保存時にファイルを圧縮し、保存後にファイルを解凍するために使用しているコマンドがいくつかあります(最初のインデントのみ)。私が苦労していることの1つは、コマンドを履歴に追加したくないということです。コマンドもカーソル位置などもありません。
私がしなければならないことは、viminfo
書き込み前のオンをオフにしてから、書き込み後のオンに戻すことだと思いました。しかし、私はそれを理解できないようです。これが私が使っている関数です:
function! s:CompressIndent()
augroup CompressIndent
autocmd!
" Befor writing, change 4 spaces (and single tabs) into 2 spaces
autocmd BufWritePre * set viminfo="NONE" " Turn off 'history' before making the pre-write substitutions
autocmd BufWritePre * %substitute/^\( \+\)\1/\1/e " Halve the number of spaces of indentation
autocmd BufWritePre * set tabstop=2 " Make sure that tabs = 2 spaces before re-tabbing
autocmd BufWritePre * retab " Turn tabs into two spaces
" When opening a file (and after writing the file) turn 2 spaces into (and 4 tabs) into 4 spaces
autocmd BufReadPost,BufWritePost * set tabstop=4 " Make sure to display in 4 tabs
autocmd BufReadPost,BufWritePost * %substitute/^ \+/&&/e " Double the number of spaces of indentation on Reading and writing
autocmd BufReadPost,BufWritePost * set viminfo='20,\"200 " Turn back on history
augroup END
endfunction
私は試しましset viminfo="NONE"
たset viminfo=""
。どちらも効果がないようでした。
どんな助けでもいただければ幸いです!
ありがとう!
編集
これで私は今ここにいますが、まだ完全には機能していません(インデントは壊れていますが、histdel()も完全には機能しません。ファイルを保存した後、カーソルは完全に新しいものに移動します位置と元に戻る履歴が分岐しているか、何か奇妙なものです:
function! s:CompressIndent()
augroup CompressIndent
autocmd!
" Befor writing, change 4 spaces (and single tabs) into 2 spaces
autocmd BufWritePre * call s:SpaceSubstitution("2") " Halve the number of spaces of indentation
autocmd BufWritePre * set tabstop=2 " Make sure that tabs = 2 spaces before re-tabbing
autocmd BufWritePre * retab " Turn tabs into two spaces
" When opening a file (and after writing the file) turn 2 spaces into (and 4 tabs) into 4 spaces
autocmd BufReadPost,BufWritePost * set tabstop=4 " Make sure to display in 4 tabs
autocmd BufReadPost,BufWritePost * call s:SpaceSubstitution("4") " Double the number of spaces of indentation on Reading and writing
augroup END
endfunction
command! -n=0 -bar CompressIndent :call s:CompressIndent()
function! s:SpaceSubstitution(toSpaces)
if a:toSpaces == "2"
%substitute/^\( \+\)\1/\1/e
else
%substitute/^ \+/&&/e
endif
call histdel('search', -1)
endfunction