【问题标题】:Is there a way to use getchar() in vim without a need to press enter after every input key?有没有办法在 vim 中使用 getchar() 而无需在每个输入键后按 enter?
【发布时间】:2020-10-28 15:28:06
【问题描述】:

我正在编写一个 vim 插件并使用 getchar() 来获取输入键,但是它需要我基本上双击我想要输入的每个键。我的最终目标是像键盘记录器一样获得键盘输入,但仅限于 vim,所以之后我可以分析数据。

很遗憾无法从https://vim.fandom.com/wiki/Wait_for_user_input_(getchar)_without_moving_cursor 工作中提出建议。

这是我插件中的一段代码:

function! s:getchar()
  let chr = getchar()
  if chr =~ '^\d\+$'
    let chr = nr2char(chr)
  endif
  python3 sample.gather()
endfunction

au CursorMoved * call s:getchar()

到目前为止,我只使用 python 将时间戳放在按下的键旁边。

我对这个主题做了相当多的研究,但无法找到如何在 vim 中正确使用getchar() 的解决方案。

【问题讨论】:

  • getchar() 根本不需要按<CR>
  • 或许,你也可以解释一下为什么简单的“q”对你不利。
  • @Matt q 有时间戳吗?我会阅读更多关于它的内容,谢谢。我需要时间戳来区分,例如:“jjj”键入没有延迟和相同的序列,但间隔为 1 分钟或其他,因为存在差异!
  • @romainl 好吧,它会将您发送到命令模式并等待输入密钥,这就是我的意思
  • @SumLare 触发自动命令的按键与getchar() 无关。如果您不希望第一次按键,那么您将不得不找到另一种不涉及按键的方式来执行getchar()

标签: vim vim-plugin getchar


【解决方案1】:

“我的最终目标是像键盘记录器一样获得键盘输入,但仅限于 vim,因此之后我可以分析数据。”

Vim 有一个选项 -w {scriptout} 用于将按键记录到文件 {scriptout}

为了将原始数据转换为人类可读的表示,我实现了Python vimgolf client 中的an example

在 Ruby 中实现的 official vimgolf client 还利用 Vim 的 -w 选项来记录按键。

我知道这并不能回答关于 getchar() 的具体问题,但我认为考虑到既定的最终目标,这可能是一种解决方法。

【讨论】:

  • 感谢您提供的示例链接,问题在于使分析变得更加困难,例如,在没有时间戳的情况下很难将 ggg + g 等连贯命令分开,但可能是这个问题即使没有时间戳也能解决
猜你喜欢
  • 1970-01-01
  • 2021-06-27
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
相关资源
最近更新 更多