如何有效地清除vim寄存器?

时间:2013-10-17 14:57:30

标签: vim vim-registers

vim中的寄存器是一个很好的功能,可以存储文本片段,甚至可以对存储在其中的文本运行命令。但是,我是一个整洁的人,在我完成时会倾向于清理。

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

我也可以执行以下命令:

:let @a = ''

然而,这些解决方案似乎只是解决问题的方法。当我执行:registers时,列表仍会显示寄存器a(空值),而不会显示从未使用过的寄存器。

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

如果是这样,是否有办法立即清除所有寄存器,即重置寄存器列表?

7 个答案:

答案 0 :(得分:21)

由于@romainl链接在邮件列表上的那个令人尊敬的答案,我们setreg('a', [])清除了注册表。

因此,代码可能变成:

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

答案 1 :(得分:17)

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

this thread on the vim mailing list有一个清除每个寄存器的命令,但它不会从:reg删除它们:

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

答案 2 :(得分:6)

删除.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

答案 3 :(得分:6)

将其放入.vimrc

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

并使用:WipeReg

清除每个注册表

如果您希望每次启动Vim时都要添加:

autocmd VimEnter * WipeReg

答案 4 :(得分:5)

可以为每个使用的寄存器设置一个值,类似于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

的输出上包含额外的寄存器

答案 5 :(得分:5)

另一种选择是永远不加载任何寄存器。正如其他人所说,寄存器是从.viminfo加载的。 -i标志用于指定要使用的viminfo文件。如果指定NONE,则不指定viminfo,因此不会加载任何寄存器。

vim -i NONE

答案 6 :(得分:0)

为了完整起见,我要注意,虽然设置寄存器以包含空字符串不会从:registers命令的输出中删除寄存器,但Vim不会保存已清除的寄存器以这种方式访问​​.viminfo文件。

因此,从列表中删除特定寄存器的另一个快速而又脏的方法是使用您建议的任一命令清除它们,然后重新启动Vim。