vim中的寄存器是一个很好的功能,可以存储文本片段,甚至可以对存储在其中的文本运行命令。但是,我是一个整洁的人,在我完成时会倾向于清理。
我知道如果我想清除注册a
,我可以使用 q a q 。
我也可以执行以下命令:
:let @a = ''
然而,这些解决方案似乎只是解决问题的方法。当我执行:registers
时,列表仍会显示寄存器a
(空值),而不会显示从未使用过的寄存器。
有没有办法清除一个寄存器,其副作用是从该列表中删除寄存器?
如果是这样,是否有办法立即清除所有寄存器,即重置寄存器列表?
答案 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。