# Change vim mode programmatically

**URL:** <https://discuss.codemirror.net/t/change-vim-mode-programmatically/3881>\
**Category:** v6\
**Created:** [January 9, 2022, 6:59pm UTC](https://discuss.codemirror.net/t/change-vim-mode-programmatically/3881 "2022-01-09T18:59:05Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![jsjoeio](https://discuss.codemirror.net/user_avatar/discuss.codemirror.net/jsjoeio/32/1726_2.png) [@jsjoeio](https://discuss.codemirror.net/u/jsjoeio)\
**Post date:** [January 9, 2022, 6:59pm UTC](https://discuss.codemirror.net/t/change-vim-mode-programmatically/3881/1 "2022-01-09T18:59:05Z")

</div>

Does anyone know how to change the vim mode programmatically? I’m using [this extension](https://github.com/replit/codemirror-vim).

I see it uses CM5 under the hood and calls `CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"});`

I don’t see a similar property/method in CM6. Here’s a demo of what I’m trying to do:

1. user changes text
2. when correct, update text in editor
3. set mode back to normal mode

![vim-demo](https://discuss.codemirror.net/uploads/default/original/2X/0/060ce44e31e81ff15acc894c442d29f0afffa7c7.gif)

---

<div class="post-metadata">

**Author:** ![jsjoeio](https://discuss.codemirror.net/user_avatar/discuss.codemirror.net/jsjoeio/32/1726_2.png) [@jsjoeio](https://discuss.codemirror.net/u/jsjoeio)\
**Post date:** [January 9, 2022, 7:18pm UTC](https://discuss.codemirror.net/t/change-vim-mode-programmatically/3881/2 "2022-01-09T19:18:29Z")

</div>

Another way this could be achieved would be to send native key events to CodeMirror i.e. send the `Escape` key.

---

<div class="post-metadata">

**Author:** ![jsjoeio](https://discuss.codemirror.net/user_avatar/discuss.codemirror.net/jsjoeio/32/1726_2.png) [@jsjoeio](https://discuss.codemirror.net/u/jsjoeio)\
**Post date:** [January 11, 2022, 4:52am UTC](https://discuss.codemirror.net/t/change-vim-mode-programmatically/3881/3 "2022-01-11T04:52:57Z")

</div>

The team behind that extension responded with two options:

Option 1:

```auto
import {Vim} from "@replit/codemirror-vim"

var view = new EditorView({...})
Vim.exitInsertMode(view.cm)

```

Option 2:

```auto
Vim.handleKey(_view.cm, "<Esc>")

```

Note: you may need to typecast `.cm` with `(view as any).cm`.

Source: [How to programmatically change modes? · Issue #6 · replit/codemirror-vim · GitHub](https://github.com/replit/codemirror-vim/issues/6#issuecomment-1009362883)
