【问题标题】:Using Codemirror in Vim Mode在 Vim 模式下使用 Codemirror
【发布时间】:2013-03-01 07:27:15
【问题描述】:

我在编造这件事时遇到了一点麻烦。我只想在 Vim 模式下使用 Codemirror 编辑功能,没有任何语法高亮。也就是说,如果我单击文本区域,它会在类似的文本编辑器中进行转换,如演示页面VIM Demo 所示。谢谢!

编辑: 如果不是Codemirror,请告诉我如何将用户单击的文本区域转换为VIM类型的编辑区域的方法。我想把它做成一个插件,这样每当我点击某个页面上的文本区域时,它就会给我一个类似 VIM(不完全是 vim)的环境来编辑。我应该如何处理键绑定的事情?请帮忙!

【问题讨论】:

  • 我在您的问题中没有看到问号。
  • 我在 cmets 中添加了问号。对此感到抱歉。编辑主要问题。
  • 好的,到目前为止你尝试了什么?你读过文档吗?
  • 无法使 Codemirror 的东西适用于我动态单击页面的文本区域。我编写了自定义的朴素代码,这是一个脚本,它将 onkeypress 事件引入每个文本区域属性并在每次按键时调用一个函数。因此我过滤键并相应地执行。我实现了基本的插入模式、导航和替换。但是为了使其功能齐全,我希望为此使用 Codemirror ..对此我一无所知。
    我阅读了 API 文档,但找不到我希望实现它的方式。如果我错过了愚蠢的部分,对不起我的愚蠢。

标签: javascript plugins codemirror


【解决方案1】:

CodeMirror 负责所有键绑定(以及 vim 模式的键映射),因此您只需为手头的 textarea 创建一个编辑器实例。

查看文档中section on static methods 下的CodeMirror.fromTextArea(),了解它是如何完成的。

也可以参考vim bindings demo,简单看一下源码。这是 CodeMirror 实例在那里初始化的方式:

1  | CodeMirror.commands.save = function () {
2  |     alert("Saving");
3  | };
4  |
5  | var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
6  |     lineNumbers: true,
7  |     mode: "text/x-csrc",
8  |     keyMap: "vim",
9  |     showCursorWhenSelecting: true
10 | });

让我们把它拆开,如下行:

  • 1-3:save 命令分配一个处理程序,该处理程序映射到 vim 键绑定上的 :w。在文档中,在键绑定部分:

    键映射中的属性值可以是 单个参数(CodeMirror 实例)、字符串或 false。这样的 字符串是指CodeMirror.commands 对象的属性,它 定义了一些默认使用的常用命令 键绑定,并将它们映射到函数

  • 4:寂静之声。

  • 5: 从 DOM 中获取 textarea 元素(以 code 作为其 ID),并将其传递给静态方法,该方法将基于那个元素。

  • 6-9:设置各种选项:

    • 6:在装订线中显示行号。

    • 7:将编辑器模式设置为类 C 以突出显示 C 代码。

    • 8:分配 vim 键绑定。

    • 9:嗯,选择时显示光标。

  • 10:总结一下。

为了使编辑器模式和键绑定工作,需要加载所需的脚本,所以我们也想包含这些:

<script src="../lib/codemirror.js"></script> <!-- main script -->
<script src="../addon/dialog/dialog.js"></script> <!-- addon for vim messages -->
<script src="../addon/search/searchcursor.js"></script> <!-- addon for vim messages -->
<script src="../mode/clike/clike.js"></script> <!-- mode for C-like languages -->
<script src="../keymap/vim.js"></script> <!-- key bindings for vim -->

【讨论】:

  • 是的!那很好,我尝试了上述方法。我想知道如何在我浏览的所有页面或网站上动态实现它?也就是说,通过用户脚本或插件的形式,无论我在浏览什么页面,如果我在任何文本区域激活 Vim 模式,它都会转换为类似 vim 的文本编辑器界面。我尝试将 document.getActiveElement.id 代替它在您的代码中的位置,但它不起作用(在静态页面中)。
猜你喜欢
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 2012-02-03
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多