CodeMirror中文说明文档

文档大纲

本文档并未完全翻译完成,我需要你的帮助。前往GitHub编辑

VIM Mode API

CodeMirror 具有强大的 VIM Mode,可以准确地模拟 VIM 最有用的功能。 可以引入 keymap/vim.js 并将 keyMap 配置设置为 "vim" 来启用。

配置

VIM Mode 可在运行时修改配置对象。 这些函数可以在任意时刻调用,并应用到所有 CodeMirror 实例。 这些函数暴露在 CodeMirror.Vim 对象上。

setOption(name: string, value: any, ?cm: CodeMirror, ?cfg: object)
设置 VIM 选项的值。 name 是选项的名称。 如果未设置 cfg.scope 但提供了 cm,则设置该选项为全局的且为实例的。 否则,根据 cfg.scopeglobal 还是 local,判断该选项是全局的还是实例的。
getOption(name: string, ?cm: CodeMirror: ?cfg: object)
获取VIM选项的当前值。 如果未设置 cfg.scope 但提供了 cm,则获取实例的值,如果失败则获取全局值。 如果提供了 cfg.scope,则将获取 globallocal 的值。
map(lhs: string, rhs: string, ?context: string)
将一个快捷键替换为另一个快捷键。 VIM 的 :map 命令。 绑定 ; 为 : 在VIM命令中为 :map ; :context 可以是 normalvisualinsert, 与之对应的是 :nmap:vmap:imap
mapCommand(keys: string, type: string, name: string, ?args: object, ?extra: object)
把一个键绑定为 motionoperatoraction 类型的命令。 触发按键事件时,会把 args 对象传递给命令。 extras.context 可以是 normalvisualinsert,仅在对应的模式下启用。 extras.isEdit 仅适用于动作,确定是否为 . 单次重复命令。

扩展VIM

CodeMirror 的 VIM Mode 实现了大部分的 VIM 核心编辑功能。 但因为需求是无限的,所以还提供了一组 API 来扩展 VIM 的功能。 与配置API一样,这些方法暴露在 CodeMirror.Vim 中,并且可以随时调用。

defineOption(name: string, default: any, type: string, ?aliases: array<string>, ?callback: function (?value: any, ?cm: CodeMirror) → ?any)
:set 命令定义了 VIM 样式的选项。 type 参数可以是 booleanstring,用于验证,通过 :set 来确定可接受的语法。 如果传入了 callback,则 VIM 不会存储选项本身的值,而是将回调用作 setter/getter 。 如果 callback 函数的第一个参数为 undefined,则返回配置的值。否则,应改为设置。 由于 VIM 选项具有全局值和实例值,因此使用全局值还是局部值由是否传入 CodeMirror 实例来判断。 因此,回调函数可能会被调用两次,一次 setOptiongetOption。 请注意,VIM 目前没有全局值,所以不支持定义 buffer-local 选项。 如果配置不应该具有全局值时,请忽略回调函数中的 cm 参数, 或者始终将 cfg.scope 传递给 setOptiongetOption
defineMotion(name: string, fn: function(cm: CodeMirror, head: {line, ch}, ?motionArgs: object}) → {line, ch})
为 VIM 定义移动命令。 应返回光标的目标位置。 head 是光标的当前位置。 如果 VIM 处于 visual 模式,则它可能与 cm.getCursor('head') 不同。 motionArgs 是传递给 mapCommand() 的对象。
defineOperator(name: string, fn: function(cm: CodeMirror, ?operatorArgs: object, ranges: array<{anchor, head}>) → ?{line, ch})
定义一个操作命令,类似于defineMotionranges 是需要操作的文本的范围。 如果在操作完成后需要将光标移动到某个位置,则它可以返回一个光标对象。
defineAction(name: string, fn: function(cm: CodeMirror, ?actionArgs: object))
定义一个动作命令,类似于 defineMotion。 动作命令可以具有任意的行为,比移动和操作命令更灵活,而不会造成正交。
defineEx(name: string, ?prefix: string, fn: function(cm: CodeMirror, ?params: object))
定义一个 Ex 命令,并将其映射到:name。 如果提供了前缀,则可以使用以 prefix 开头的 name 都可以用来调用命令。 如果 prefix 错误,则将 name 用作前缀。 params.argString 是命令名称后面的提示字符串。 params.args 是以空格分隔的 params.argString。 如果命令以 line range 作为前缀, 则设置 params.lineparams.lineEnd