【问题标题】:Productivity analyzer for vimvim 的生产力分析器
【发布时间】:2011-12-05 19:54:52
【问题描述】:

背景

我正在寻找为 vim 构建生产力分析器,它可以为用户执行的特定重复任务静默显示更有效的解决方案。提示可能会以咆哮、状态栏等形式显示。

别笑,创意来自 Clippy:http://en.wikipedia.org/wiki/Office_Assistant 当然,我不想构建另一个有趣的东西,比如 vigor 我是关于严肃的效率分析,这对 vim 新手特别有用。

问题

这是否有意义,是否有任何理论涵盖此类分析?

【问题讨论】:

  • @Patrick87,实际上我的问题适用于任何文本处理器,我很乐意查看现有的实现/算法,即使它会在 Windows 上的记事本上完成)))

标签: vim text analysis


【解决方案1】:

在我的头顶:

  • 这需要大量的 AI/模糊分类。很难分析用户正在“尝试做什么”(通常用户不清楚并且会偏离轨道:哦,当我在这里时修正那个错字;对齐那个评论......好的,现在继续另一个任务)
          具有讽刺意味的是,我认为当以“Vim Pro”的方式做事时,这会变得更容易(但发现它并没有用,因为它已经是最优的了!)

  • 还有,TIMTOWTDI;你不能只说“这是最好的方法”。这取决于品味、手部位置、键盘布局、插件可用性等等。

  • 我认为到目前为止,真正学习这种东西的最好方法是通过

    • 阅读文档
    • 堆栈溢出 [vim]

怀疑被抛在脑后,我可以看到具有 类似提示 功能的插件有很好的市场:

我会考虑“永远在线”的提示,就像您在俗气的国际象棋引擎中看到的(显示可到达的字段、被攻击的字段、风险、串、叉以及交换组合结果的可视化):

  • 您可以在边距中显示标记的位置(这样人们会更加了解它们,尤其是<,> 等)。现在执行此操作的插件是ShowMarks在屏幕截图中,请注意ab 的标记,还有(漂亮!){ 和( 和类似的文字动作(我刚刚看到>. 和其他人)1

  • :set relativenumber 已经有助于让用户想到 13j 而不是 jjjjjjjjjjjjj - 但请在此处查看我的偏好 Moving the point between in charactors by quick search

  • 我可以看到语法高亮插件,其中封闭的文本对象(单词、单词、句子、段落或标识符、parenblock、braceblock)将以越来越多的背景颜色突出显示。如果我们想出一种覆盖有用提示(用于文本对象运动的键)的方法,你会得到很好的提示,IMO。

  • 我可以看到按“o”将光标移动到视觉选择的另一端的提示

  • 标准 matchit 在提示匹配括号方面已经非常有用(尽管它并没有以实际的剪辑风格暗示您可能会使用 % 到达那里)

  • +signs 功能的其他鼓舞人心的用途是:errormarker.vim(除了放置图形标志外,还使用气球提示);我可以看到它得到了很好的利用(如果只是指向某些文档主题)

关于文本对象荧光笔,我怀疑它可能已经存在。我现在去看看


1我认为要获得更多分数,我需要做(?)

 :let g:showmarks_include+="<>[]"
 :ShowMarksOn

我还建议将更新时间设置为快速(例如 500 毫秒)

【讨论】:

  • 非常愉快的回复,谢谢。顺便说一句,文本对象荧光笔将是一件好事。我也去搜一下。
  • @lucapette:this 似乎至少可以反过来(还没有尝试过)
  • 感谢您的链接!我对 Kana 的插件非常熟悉。他们很好。我试试这个
【解决方案2】:

我觉得你的想法很有趣。如果语气正确,这样的功能可能会有所帮助,而且不仅对新手有用。

但我看到了一堆困难:

  • 您会显示“正确的方式”来执行前一个任务还是更短的方式而不考虑其正确性?例如,一个新的 Vim 用户可以通过 Vjjjd 删除 4 行,你建议 V3jd4dd 还是 dip 如果合适或其他解决方案?
  • 无论如何,您如何定义“正确的方式”?在这里就 SO 或某些邮件列表达成共识,或者通过向一群著名的 Vim 专家提问?
  • 您将如何定义您正在分析的任务?任务的界限是什么?

无论如何,这是个好主意。

【讨论】:

  • 这就是我在这里提出问题的原因:)
【解决方案3】:

我个人的意见是,一个像clippy这样的工具很难处理。正如上面提到的人,我认为最困难的部分是在编写文本时了解用户的意图。如果你把它收起来,并有一种明确的方式为你的意图添加语义,你的生活会变得容易得多!

因此,我认为作为第一步,输入-输出-序列工作流可能更容易测试并从中获得结果,而不是实时建议。

我正在考虑编写一个通用的 vi 前端以将其应用于各种编辑器/文本框(即:pidgin)。

这个思考过程的结果之一是,输入语言应该是有规律的(或最多是上下文无关的)。因此,vi 实例的输入可以由状态机表示。这没有完全证明,而是一个模糊的猜测!显然,必须付出更多努力来确定重复命令(例如:13j)是否可能无法使语言进入上下文无关语法。

如果 vi 输入语言是常规语言,您可能有机会使用有界模型检查来计算该状态图中的一系列状态转换,从而产生所需的输出。我认为目前进行有界模型检查最有效的方法是通过反例并将问题简化为 sat 实例(只需 google 即可)。

我想听听您对此的看法,所以请发表评论,如果有更多相关内容,我们可以尝试讨论这个问题。

编辑

我认为您可以尝试做编译器所做的标准优化器工作。

但并不是特别是宏 q[a-z] @[a-z] 可能很难找到和替换。我会假设,这是 NP 完备的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    相关资源
    最近更新 更多