如何有效清除vim寄存器?

vim中的寄存器是存储文本片断甚至运行存储在其中的文本的命令的一个很好的function。 但是,我是一个整洁的人,当我完成时往往会清理干净。

我知道,如果我想清除注册,我可以使用q q

我也可以执行下面的命令:

 :let @a = '' 

但是,这些解决scheme似乎仅仅是解决问题的方法。 当我执行:registers ,列表仍显示寄存器a (具有空值),而没有使用的寄存器不显示。

有没有办法清除一个寄存器的副作用,从这个列表中删除寄存器?

如果是的话,是否还有办法一次清除所有寄存器,即重置寄存器列表?

AFAIK不能使用内置的命令/函数使寄存器从列表中消失。 这似乎是可行的,只是从你的~/.viminfo删除它听起来有点极端。

vim邮件列表中的这个线程有一个清除每个寄存器的命令,但是它不会将它们从:reg删除:reg

 let regs='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/-"' | let i=0 | while (i<strlen(regs)) | exec 'let @'.regs[i].'=""' | let i=i+1 | endwhile | unlet regs 

由于@romainl链接的邮件列表上那个古老的答案,我们有清除寄存器的setreg('a', [])

因此,代码可能会变成:

 let regs=split('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/-"', '\zs') for r in regs call setreg(r, []) endfor 

删除.viminfo文件或删除.viminfo文件中的注册行。

你可以从这里获得细节:

 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

把它放在你的.vimrc

 command! WipeReg for i in range(34,122) | silent! call setreg(nr2char(i), []) | endfor 

并清除每个注册:WipeReg

如果您希望在每次启动Vim时都发生这种情况,请添加:

 autocmd VimEnter * WipeReg 

另一个select是永不加载任何寄存器。 正如其他人所说,寄存器从.viminfo加载。 -i标志用于指定要使用的viminfo文件。 如果你指定了NONE ,没有viminfo,因此没有寄存器将被加载。

 vim -i NONE