打印有关 Vim 报告中使用的寄存器的信息

Print information about register used in Vim report

当我输入寄存器时,我经常输入错误的 "x 语法,所以我想确认它使用哪个寄存器来输入文本。

例如,如果我输入 "x3yy,我的理想输出将是“3 行被拉入 x”,而不是当前的“3 行被拉”。是否可以以某种方式修改此报告?理想情况下,它也适用于删除等。

此功能已添加到后续补丁 8.0.0724(感谢 Ingo Karkat 的报告)。

Neovim, as of now, hasn't merged this patch. However, it implements TextYankPost,它允许您破解类似的行为,因为它提供了操作类型、使用的寄存器以及复制到寄存器的内容。

考虑到这一点,以下代码片段可以满足您的要求:

function! s:better_operator_message()
  let number = len(v:event['regcontents'])

  if v:event['operator'] == 'c' || v:event['operator'] == 'd'
    let message = number . ' fewer lines'
  elseif v:event['operator'] == 'y'
    let message = number . ' lines yanked'
  else
    return
  endif

  if v:event['regname'] != ''
    let message = message . ' into register ' . v:event['regname']
  endif

  echom message
endfunction

set report=10000000000
augroup better_operator_message
  autocmd!
  autocmd TextYankPost * call <sid>better_operator_message()
augroup end

如果您有兴趣,我已将此代码段作为 plugin 提供。

从版本 8.0.0724 开始,最近的 Vim 版本中已解决此问题:用于 yanking 的消息不指示寄存器

升级后(等待操作系统的软件包可用,或者自己编译 Vim),例如 "a4yy 上的消息将是:

4 lines yanked into "a