Vimのレジスターは、テキストスニペットを保存し、その中に保存されているテキストに対してコマンドを実行するための優れた機能です。しかし、私はきちんとした人であり、私が終わったときに物事をきれいにする傾向があります。
レジスタa
をクリアしたい場合、使用できることを知っています qaq。
次のコマンドも実行できます。
:let @a = ''
ただし、これらの解決策は、問題に対する単なる回避策のようです。 :registers
を実行しても、リストにはレジスタa
(空の値)が表示されますが、使用されたことのないレジスタは表示されません。
このリストからレジスタを削除する副作用があるレジスタをクリアする方法はありますか?
もしそうなら、すべてのレジスタを一度にクリアする方法、つまりそのレジスタのリストをリセットする方法はありますか?
@ romainl でリンクされたメーリングリストでの由緒ある回答なので、レジスタをクリアするsetreg('a', [])
があります。
したがって、コードは次のようになります。
let regs=split('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/-"', '\zs')
for r in regs
call setreg(r, [])
endfor
.viminfo
ファイルを削除するか、.viminfo
ファイルのレジスタ行を削除してください。
詳細は Here から取得できます。
The viminfo file is used to store:
- The command line history.
- The search string history.
- The input-line history.
- Contents of non-empty registers.
- Marks for several files.
- File marks, pointing to locations in files.
- Last search/substitute pattern (for 'n' and '&').
- The buffer list.
- Global variables
Romainlのアプローチと同様に、使用される各レジスタに値を設定することができます。
function! ClearRegisters()
redir => l:register_out
silent register
redir end
let l:register_list = split(l:register_out, '\n')
call remove(l:register_list, 0) " remove header (-- Registers --)
call map(l:register_list, "substitute(v:val, '^.\\(.\\).*', '\\1', '')")
call filter(l:register_list, 'v:val !~ "[%#=.:]"') " skip readonly registers
for elem in l:register_list
execute 'let @'.elem.'= ""'
endfor
endfunction
これにより、:registers
の出力に追加のレジスタが含まれなくなります。