发现一个现象:如果只是打开一个文件,可以:q!,如果进入insert模式,就无法返回到shell。只是当前的buffer不见了,如果再次使用space o t,发现仍然在vim中,并没有返回到shell。我希望能退出vim,返回到shell。请大家给指点
我的临时解决办法:
- M-X evil-mode,先禁用evil-mode
- M-G 从插入模式返回到命令模式,不知道为什么是这个按键
- 按:两次输入q!,返回shell 以上是自己摸索出来的,原理不详,很是莫名其妙
- vterm 下,在 evil 的 insert state 中才能输入
- vterm 下进入 vim 并进入 vim 的 insert state 后,按 esc 并不会退出 vim 的 insert state,而是会退出emacs evil 的 insert state。此时你输入 :q 是给 emacs 的命令而不是给 vim 的命令。
解决方案也很简单,用其他的按键输入 esc 给 vterm 中的 vim。你可以看看 vterm-mode-map 看看按键绑定。我这边会用 ctrl + backspace。
另外,为什么要在 vterm 里用 vim 这么别扭的?
读一读 vterm 的 readme,配置一下 shell,就能直接 空格 + . 在当前路径下调出 find-file 在 emacs 里编辑文件了啊。
因为不知道可以 空格 + . 打开文件
怎样查看vterm-mode-map?是使用C-h m吗?我用C-h m 查看了所有的按键映射,特别是vterm-send-*,并没有发现有特别需要注意的。然后使用C-h f 发现有一个vterm-send-escape,提示如下
使用M-x vterm-send-escape进行测试,结果会直接退出DoomEmacs而不是返回到shell下。您是自行绑定了一个按键吗?把Ctrl + Backspace 绑到哪个函数上了?没仔细看楼上,反正返回term编辑我是这样的:
(general-define-key
:states '(normal motion)
:keymaps 'vterm-mode-map
"i" (lambda! (vterm-reset-cursor-point) (evil-insert-state))
"a" (lambda! (vterm-reset-cursor-point) (evil-insert-state)))
vterm自带还是evil collection有给vterm加evil来着。我没用,自己绑了一些按键
问题解决了,确如samb233所说,仔细看看文档是很有帮助的。解决的办法如下:使用函数vterm-send-next-key。例如,为了从vim里退出,可以按下列步骤执行:
- M-X vterm-send-next-key
- 点按ESC键
- M-X vterm-send-next-key
- 点按冒号
- M-X vterm-send-next-key
- 点按q键
- M-X vterm-send-next-key
- 点按!并回车 成功退出vim返回shell
当然,也可以像smb233那样,把vterm-send-next-key绑定到自定义的按键上。具体地,可以参考他提供的链接