我可以搜索所有寄存器来粘贴值

时间:2015-10-03 00:27:58

标签: vim

假设我正在重构一些文本,包括包含文本“log”的行。经过一些编辑后,我想粘贴日志行,但它现在在一些遥远的寄存器中。有没有办法搜索包含术语“log”的第一个寄存器并粘贴其内容?

3 个答案:

答案 0 :(得分:1)

一种方法(虽然不是很方便)是将输出重定向到你不使用的寄存器,让我们说z。

:redir @z

列出注册表

:reg

"z的结果粘贴到某个缓冲区中,然后进行搜索。

你还必须在之后停止重定向。

:redir END

答案 1 :(得分:1)

以下应该做的工作:

function! SearchAndPasteReg()
    let l:pattern = input('Reg search: ')
    if l:pattern == '' | return | endif
    for l:i in range(1, 9)
        if match(eval('@'.l:i), l:pattern) != -1
            execute printf('normal "%i]p', l:i)
            return
        endif
    endfor
    redraw | echo 'Pattern not found'
endf

nnoremap <silent> ]R :call SearchAndPasteReg()<cr>

我不确定您是在谈论编号寄存器还是所有寄存器。如果要搜索所有regs,只需使用包含所有所需寄存器名称的列表扩展范围,如下所示:

function! SearchAndPasteReg()
    let l:pattern = input('Reg search: ')
    if l:pattern == '' | return | endif

    let l:regs = range(char2nr('1'), char2nr('9'))
    call map(extend(l:regs, range(char2nr('a'), char2nr('z'))), 'nr2char(v:val)')

    for l:reg in l:regs
        if match(eval('@'.l:reg), l:pattern) != -1
            execute printf('normal "%s]p', l:reg)
            return
        endif
    endfor
    redraw | echo 'Pattern not found'
endf

nnoremap <silent> ]R :call SearchAndPasteReg()<cr>

答案 2 :(得分:-1)

可能使用第三方插件,但您仍然可以使用:reg[isters]命令查看所有寄存器的内容,或仅使用编号寄存器查看:reg 0123456789

相关问题