Como eu esvazio todos os registros no vim?

1

Como posso excluir os valores associados a todos os registros no vim?

Eu encontrei este snippet no web:

function! ClearRegisters()
    let regs='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/-="*+'
    let i=0
    while (i<strlen(regs))
        exec 'let @'.regs[i].'=""'
        let i=i+1
    endwhile
endfunction

command! ClearRegisters call ClearRegisters()

Quase funciona, mas coloca um valor vazio em cada registro, em vez de excluir o registro. Crucialmente, isso significa que quando você usa o comando :registers , todos os registradores ainda estão presentes, o que torna a tela incômoda (embora seja interessante notar que se você sair do vim e recarregá-lo, os registros serão esvaziados completamente, mesmo se viminfo estiver configurado para salvá-los).

Como posso excluir totalmente todos os registros, para que :registers não os exiba e sem precisar reiniciar?

    
por Andrew Ferrier 15.07.2013 / 00:30

2 respostas

2

Ao contrário das marcas, que têm um comando :delmarks e um valor especial "não definido", os registros não podem ser excluídos. Um registro vazio é o mais próximo de um estado "não usado" que você pode obter. (No entanto, o Vim e o comando :registers têm o comportamento especial que você observou quando registros não inicializados que não foram restaurados do arquivo viminfo são ignorados na saída.)

Eu acho que o que você está procurando é um comando :Registers personalizado (você pode até mesmo apelidá-lo para o comando original em minúsculas com um :cmap ou o cmdalias plugin) que omite vazio registra a partir de sua saída, assim:

function! s:Registers( arguments )
    redir => l:registersOutput
        silent! execute 'registers' a:arguments
    redir END
    for l:line in split(l:registersOutput, "\n")
        if l:line !~# '^"\S\s*$'
            echo l:line
        endif
    endfor
endfunction
command! -nargs=? Registers call <SID>Registers(<q-args>)

Como alternativa, você pode escrever um patch do Vim para introduzir um comando :delregisters . Não deve ser muito difícil escrever; basicamente tem que definir a estrutura y_regs[i].y_array para NULL (veja ops.c no código fonte do Vim).

    
por 15.07.2013 / 08:47
1

Coloque isso no seu .vimrc :

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

e limpe cada registro com :WipeReg

Se você quiser que isso aconteça toda vez que você iniciar o Vim, adicione:

autocmd VimEnter * WipeReg
    
por 06.12.2016 / 20:28