当我的esc键不起作用时,如何将ESC信号发送到vim?


Answers:


7

尽管有现有的解决方案,但Vim中的常规解决方案是重新映射.vimrc配置中的键。实际上,许多Vim用户都有一个更容易达到的密钥,将其重新映射到Esc。流行的选择是Ctrl+ Enterjj等等。

要启用此功能,只需将以下内容放入您的系统.vimrc并重新加载/重启Vim:

" Shift-Enter
inoremap <S-CR> <Esc>
" Double-j
inoremap jj <Esc>

更多信息和替代方法


1
拜托,这就是Vim的方式。Learn Vim the Hard Way(书)提倡的另一种常见方式是inoremap jk <Esc>
俗称的

这是一个不错的解决方案,但是仅使用Ctrl + Enter + j会有什么问题?
桑德拉·罗斯

@SandraRoss您确实可以使用任何您喜欢的按键组合(尽管请注意,某些组合(例如Ctrl-Enter)在macOS上不起作用)。就是说,Ctrl + Enter + j使我打起来更加困难,而且我真的不知道您是否可以在Vim中甚至可以使用两个非修饰键(Enter,j)来配置三键组合。
康拉德·鲁道夫

好吧,我明白了。实际上,Ctrl + Enter + jj对我不起作用,因为实际上我使用的是macOSX。至少,您能告诉我仅按Ctrl + j时必须输入的内容吗?
桑德拉·罗斯

@SandraRoss为此,inoremap <C-j> <Esc>应该工作。:-)
康拉德·鲁道夫

32

Ctrl- [向终端发送与物理Esc密钥相同的字符。通常,后者只是前者的捷径。


3
我曾经有一个真正的vt220终端,它的键盘没有Escape按键。压榨Ctrl+[是产生这种现象的唯一方法Escape
库萨兰达

11

如果您希望能够使用单个键,则作为纯* nix解决方案(无Vim映射),可以将另一个键定义为Esc。就像Emacs用户重新映射CapsLockCtrl某些Vim用户(包括我)一样,重新映射CapsLockEsc。这适用于使用X11的任何* nix。

使用xev -event keyboard(然后按CapsLock)获取键的CapsLock键码(对我来说,它是键码66)。然后,您可以xmodmap用来重新映射密钥:

xmodmap -e 'remove Lock = Caps_Lock' -e 'keycode 66 = Escape'

要在登录时获取此信息,可以将xmodmap表达式添加~/.Xmodmap如下:

remove Lock = Caps_Lock
keycode 66 = Escape

尽管是YMMV的第二部分,但由于并非所有显示管理器都在运行~/.Xmodmap。您可能需要添加xmodmap .Xmodmap.xinitrc其中的一些。


我确切地知道你的意思。我已经在本周早些时候看到过
Sandra Ross

我会这样做,但是我使用CapsLock作为我的撰写密钥(:
DopeGhoti

6

您可以尝试Ctrl-C,它对我有用,并且在我看来比ESC更容易。但是我不确定默认情况下是否启用它。


CTRL-C是ASCII 0x03,将SIGINT发送到外壳-与ESC不同。

@cat它在vim中的工作原理基本相同。我一直使用Ctrl-C而不是Esc
Erik W

1
@cat:您可以免费获得它,因为vim拥有该处理程序。您不必自己做任何事情。这个答案开箱即用。我刚试过 它一般适用于任何应用程序吗?不,但这不是要求的。
与莫妮卡(Monica)进行的轻度比赛

2
@cat:真的吗?标题为“当我的esc键不起作用时如何将ESC信号发送到vim?” ,唯一的标签是vim,问题中描述的问题是关于转义Vim的插入模式。这是问题的概括部分:“是否存在另一个用于释放插入模式的键。” 如果这不是特定于Vim及其插入模式,那么我不知道这是什么!
与莫妮卡(Monica)进行的轻度比赛

1
@LightnessRacesinOrbit好吧,当我最初看到标题时,它是“用于Esc的另一个键”,而这个问题似乎根本没有针对性vim。抱歉!_(ツ)_ /¯

-3

Ctrl + F2

默认情况下启用。无需配置任何设置。

您将进入正常模式,您可以在其中进行操作:q! or :wq


3
Ctrl+F2可能发送逃逸,但也会发送其他东西。
库萨兰达
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.