---
# System prepended metadata

title: HackMD vim ESC快捷键问题

---

# HackMD vim ESC快捷键问题
## 问题
[hackmd](hackmd.io)支持vim在线编辑markdown。

![](https://i.imgur.com/3fpXchk.png)

你先点左上角的编辑按钮，就可以看到，在编辑器的右下角有的选。

问题是vim里的一个重要按键`ESC`键，他不认，一按`ESC`就失去光标焦点。

原因是hackmd使用的是`CodeMirror` 的vim支持方案，在[这里](https://hackmd.io/@docs/keyboard-shortcuts#EmacsVim)有写明。

起作用的就是这个 [vim.js](https://codemirror.net/5/keymap/vim.js) 文件。

在这个`vim.js`文件中，搜索`ESC`就可以看到，他做的key-binding是什么。所以他绑定的是`ctrl+c`作为`ESC`。

```text
    { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>' },
    { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>' },
    { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },
    { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },
    { keys: '<C-Esc>', type: 'keyToKey', toKeys: '<Esc>' }, // ipad keyboard sends C-Esc instead of C-[
    { keys: '<C-Esc>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },
```

## 需求

我希望每次在打开hackmd网站的时候，这个`vim.js`文件被我自动替换一下。

主要就是改下key-binding, 我需要使用大小写切换键作为`ESC`键。

所以问题就变为，我能在访问特定网站的时候自动替换他特定的js文件吗，如果可以该怎么做？

另外我inspect的时候好像没找到`vim.js`文件，它在哪？