我喜欢vim而不是emacs的主要原因是,我离开主行的手的移动距离非常小(即使是程序员)。但是,我这样做的主要时间是通过按Escape键离开插入模式。

我最近了解到也可以使用Ctrl + C离开插入模式。但是,这并不是真正的改进。

如何在不使双手离开主行且不严重影响打字能力的情况下退出插入模式?注意:虽然我很想听听qwerty布局的解决方案,但我使用的是带有香草味的vim和dvorak键盘布局。

评论

您可以将任何组合键映射到任何地方,而不能做其他任何事情。那是你的意思吗?

了解了Ctrl + c快捷键THX!

如何将Caps Lock映射为Esc?

@PhillippeGachaud:不要使用Ctrl-C代替Esc。 Ctrl-C与Escape不同,它是强制的Escape,在某些情况下的行为可能有所不同。

#1 楼

常见的绑定是jj,因为如果您使用主行定位,它对于QWERTY布局非常有效。

-您应该在输入第二个字符之间等待1秒钟(默认情况下)。 (有关详细信息,请参见jj)。

还有:help 'timeout',它将使您退出插入操作,让您执行一个常规命令,然后又将您重新插入到插入操作中。 http://vim.wikia.com/wiki/Avoid_the_escape_key

评论


在dvorak中,j是c键。因此,这并不太糟(键入cc)。我还可以绑定hh(qwerty j键= dvorak h),这只会在我键入shhhhhhh或其他内容时引导我。

–durron597
2015年2月4日在13:59



cc是至少两个英文字母的更常见的组合键。因此,这可能不是最佳选择

–尼克J亚当斯
2015年2月4日在14:44

模仿JK怎么样?找到两个在Dvorak中相邻但在您的首选语言中不常见的组合键。例如,tn是jk的位置等效值。

–大卫·洛德(David Lord)
2015年2月5日,1:19

我有点想让JK / KJ即使在Dvorak中也退出正常模式;它们是QWERTY键盘上的“ c”和“ v”键,因此对于我的左指针和中指来说很容易。

– alxndr
15年2月18日在23:33

我认为我们可以做得更好-请改用ii。是的,您确实必须将手指移离主行,但是仍然很舒适。更重要的是,您无需动动手指就可以在模式之间来回切换。

– Sridhar Sarnobat
18-11-28在0:21

#2 楼

除了其他人引用的内置替代项<C-[><C-c><Esc>之外,另一种流行的解决方案是将<CapsLock>重新映射为附加的Escape。
在Qwerty和Dvorak键盘上都可以。

这样,您可以用左手的小手指非常轻松地按Esc,而无需从HomeRow上移开手(顺便说一下,Escape恰好在Bill vi编写vi时使用的ADM-3A终端中的CapsLock上方) 。

重新映射可以完成:


在Windows上使用AutoHotKey实用程序;在Mac上使用KeyRemap4MacBook实用程序和其他实用程序;

在Linux上因桌面环境而异。例如,在Linux Mint / Cinnamon上,只需在菜单->键盘->键盘布局-> Caps Lock行为中选择
正确选项即可。另外,但不那么容易,可以使用xmodmap程序在Xorg级别重新映射它,并使其运行以下.Xmodmap文件:

clear Lock
keycode 0x42 = Escape


系统可以设置为自动通过策略性地在登录自动源文件链中放置以下shell脚本行(假设.Xmodmap位于主目录~),在每次登录时运行该脚本:

if [ -s ~/.Xmodmap ]; then
  xmodmap ~/.Xmodmap
fi


但是,这很棘手,因为实际来源的文件会根据所使用的(桌面)环境而有所不同。例如,在Cinnamon“启动应用程序”中,我将xmodmap称为条目(这使我不仅可以执行标准的GUI键重映射自定义操作)。


有些人走得更远并对CapsLock键进行编程,使其具有以下功能:


按住并保持为Ctrl键,
通过快速按住并释放为Esc键。

在Windows和Mac上,可以通过正确设置/编程相应的remap实用程序来完成此操作(特别是有关AutoHotkey提示的信息,请参见此处,有关KeyRemap4MacBook的信息,请参见此处)。在Linux上,使用程序xcape。

评论


完全同意。在主行上使用ctrl键可以提高很多可用性(使用ctrl + n滚动完成,使用ctrl + f / ctrl + b滚动浏览文件,使用ctrl +]转义等)。所有这些键组合都更易于执行这条路。

– John O'M。
2015年2月4日在20:09



关于按Ctrl键(在常规位置)而不用扭曲小指的方法:您可以用手的手掌按此键,如此处所述(我在网上找到了一个不错的巧妙技巧,可以它回来:)和谁发明它的荣誉)

–乔瓦尼·马吉奥拉尼(Giovanni Maggiorani)
2015年2月5日在21:42



FWIW KeyRemap4MacBook已重命名为Karabiner:pqrs.org/osx/karabiner/index.html.en

– alxndr
2015年2月19日0:00

如果将Ctrl重新映射为Alt(Cmd),反之亦然,则确实会发光。小指弱,拇指强。在QWERTY上,您甚至不需要为此离开家,在Dvorak上,它不是很好,但是可以接受。

–纳什桥
16 Dec 16'在19:08

队列中的编辑与ADM3A的原始键盘布局有关

– D. Ben Knoble♦
19年11月18日在20:03

#3 楼

我使用的映射是:

inoremap jk <esc>
inoremap kj <esc>


这样,您可以同时同时按下j和k,而不必担心首先按下哪个键。

评论


但是我正在写一本关于在雷克雅未克玩埃德加·迪克斯特拉玩二十一点的书! ;)

–durron597
15年2月4日在15:05

如果您想写任何荷兰语,两者都是可怕的。

–希勒(Hielke Walinga)
19年5月21日在10:20

#4 楼

<C-[><C-c><Esc>的两个本机替代品。

评论


同样,这些并不是改进,因为Ctrl与Escape一样,离主行也很远。

–durron597
2015年2月4日14:25

@ durron597在QWERTY键盘上,Ctrl可能离主行很远,但确实有一个重要区别:它在主行下方。您只需要动动手指即可按下它,而使用Esc则需要稍微旋转整个手。而且,具有很好的对称性(两个小手指都朝相反的方向移动)。

– wchargin
15年2月4日在15:10

请注意,不完全相同。

– wchargin
15年2月4日在15:11

同意习惯使用可以巧妙地破坏插件和autocmds。

–大卫·洛德(David Lord)
2015年2月5日,下午1:22

在大多数欧洲键盘布局上,键入将为您提供Emacs-fingers。

–Lstor
17年4月28日在7:53

#5 楼

您可以将Caps Lock映射到Control,而无需使用任何外部程序:


在Mac OS X中,请访问系统偏好设置>键盘->修改键

在Linux中执行: setxkbmap -option caps:ctrl_modifier在Windows中编辑注册表。都退出Vim中的插入模式。 br />

Ctrl- [是首选,因为它总是像Escape一样工作。

与Ctrl-C的一个显着区别是当以逐块可视方式保留编辑时模式,Ctrl-C会保留您在当前行上所做的更改,但不会在块中的其他行上重复更改,这就是该模式的关键所在。

它也不会t检查缩写,或触发InsertLeave事件。请参阅:help i_CTRL-C


#6 楼

我建议使用我的插件vim-easyescape。它正在等待下一个键以确定是否应用映射)。暂停会引起视觉干扰,您可能会注意到,也可能不会注意到。 vim-easyescape没有这种问题,并支持自定义超时。

#7 楼

在终端vi和Vim中,
alt + single-normal-mode-key将可在大多数终端中进行快速编辑。例如,当您键入alt + k时,终端仿真器会向运行的程序发送两个字符:esck。 Vi和Vim会按照您的期望进行解释。它会退出插入模式(由于转义)并执行正常模式命令(在示例中,将光标向上移动一行)。

如果您的键盘是退出插入模式的便捷方法,在空格键旁边有一个alt键(这样就可以用拇指按下它,让您的手指放在主行上),只要您正在使用具有此行为的终端仿真器并且不介意运行普通模式命令。

评论


您能详细说明什么是单正常模式键吗?你是说逃生?

– Kenorb
2015年2月19日在9:10



我也不太明白这个答案。实际上,Alt + x在正常模式下似乎与Alt有所不同?还有其他一些键似乎不起作用?但也许我用错了..?也许您可以扩展您的答案以解释其工作原理,并链接到一些Vim文档也将很不错:-)谢谢! :-)

–马丁·图尔诺伊(Martin Tournoij)
2015年2月19日在9:52



实际上取决于您的终端配置,并且通常未按照您建议的那样进行设置。

–克里斯蒂安·布拉班特(Christian Brabandt)
16年7月9日在18:11

我对此表示赞同,然后查看历史记录,并意识到由于某种原因,主持人对其进行了编辑,目的是要凭空添加99%的文本,而不是像我们其他人那样发表评论。所以我不得不推翻我的投票。当然,这里发生的事情超出了明智的编辑范围?我拒绝的破坏性编辑要少得多。当然,新内容很棒,但是不属于这个答案。它应该是它自己的。

– underscore_d
16-10-29在21:35



@underscore_d,为什么额外内容的作者权实际上意味着您“必须”推翻您的投票?投票的目的是使最佳答案可见,其次才是给答题人以声誉。如果答案是好的,请投票;不用担心编辑历史。

–通配符
18年8月14日在23:16

#8 楼

FWIW我使用:

:map! ;l ^[
:vmap ;l ^[


感觉就像按回车键一样。
我也使用;作为其他插入模式映射的领导者。

我唯一需要输入';'的时间。 +字母表示打高尔夫;否则我没有任何冲突。

评论


也许将其映射为逃逸比将其映射为^ [更好? :)

–亚历山大·米尔斯(Alexander Mills)
17-2-28在22:20

#9 楼

如果您使用的是美式英语键盘,则按Ctrl- [与按Esc等效。这提供了一种退出插入模式的简便方法。或者使用Ctrl-c。

如果您处于vim处于简单模式(-y),则必须按Ctrl-l(Control-L)退出插入模式。 br />还有Ctrl + o只能暂时退出插入模式以执行一个命令并返回到插入模式(请参阅::help i_CTRL-O

或Ctrl + r,但这仅用于插入寄存器或表达式的内容,例如Ctrl + r,= 5 * 5(请参阅::help i_CTRL-R:help c_CTRL-R和stackoverflow帖子)。

评论


仅供参考:Ctrl + r用于插入注册表(包括表达式= reg)。如果要临时执行一次性命令,请使用Ctrl + o。

– Sukima
2015年2月19日在4:08



#10 楼

我已经使用Ctrl + 3了很长时间了,我发现它比大多数替代品都更容易键入并且似乎很好用(至少在Linux上是这样)。
我的Caps Lock映射到了Ctrl,因此非常舒适键入它。

我尝试使用Ctrl + c一段时间了,但是我遇到了一些问题,现在我不记得了,但是我没有得到与Esc完全相同的行为,就像我现在使用Ctrl + 3一样。

评论


Ctrl-3应该在做什么?

–克里斯蒂安·布拉班特(Christian Brabandt)
16年7月30日在6:46

我不知道它是如何工作的,但是它像香草Vim中的Esc一样工作。我是通过测试组合来凭经验发现的,不知道有关内部工作原理的详细信息。

–elias
16年7月30日在16:18

这不是vi的东西,也可以在shell上工作。如果在外壳上使用bindkey -v启用了vi模式,这将非常有用

–加尔各答
16-09-26在11:20

#11 楼

我已经为<A-e>设置了转义符:它还具有更好的总体行为。映射变为:

noremap  <A-e> <Esc>
snoremap <A-e> <Esc>
inoremap <A-e> <Esc>
tnoremap <A-e> <Esc>

" For some reason in command line mode '\e' is interpreted as Enter.
cnoremap <A-e> <C-c>


#12 楼

这是我仅了解的无配置,仅限Mac的替代方案。在macOS的Terminal.app和MacVim的GUI版本中(但不是特别是在iTerm2终端*中),是标准macOS组合键⌘。 (命令周期)可用于模拟Esc按键。

*至少,不要使用我在首选项中可以找到的任何配置选项。

评论


太棒了...我什至都不知道!

– D. Ben Knoble♦
20年4月21日在14:03

#13 楼

如前所述,将CAPSLOCK重新映射到ESCCTRL需要附加的SW。对我来说,这不是问题,我非常喜欢这种映射!这就是我的操作方法:

在Windows上将CAPSLOCK重新映射到ESCCTRL
如果要将CAPSLOCK都重新映射到ESC(单独按下时)
CTRL(在用其他键按下时)
您可以使用ililim的这小块开源软件。

您不需要admin特权,并且ESCCTRL
我可以使用它来享受便捷的CTRL + anything印刷,而不会伤害我的小拇指,并且可以切换MobaXterm中通过ssh使用的Vim模式。要安装,请遵循以下说明。

在Linux上将CAPSLOCK重新映射到ESCCTRL
要在Linux上执行相同的操作,可以使用XCAPE。要将其安装在Ubuntu上,请使用:
sudo apt install xcape

setxkbmap -option ctrl:nocaps
xcape -e 'Control_L=Escape'

第一个命令是将CAPSLOCK映射到ESC,而第二个命令则按其他键。
要在X会话中永久使用此键,可以将其添加到CTRL中。

#14 楼

nnoremap <C-I> <C-I>
vnoremap <Tab> <Esc>gV
onoremap <Tab> <Esc>
inoremap <Tab> <Esc>`^


我重新映射选项卡以退出。从历史上看,我认为这是esc键的所在地,因此我使用了它,并且从不回头。我几乎不需要在文档中放入选项卡,当我这样做时,只需按Shift + Tab。我从来没有错过原始的制表符绑定。

#15 楼

vim v8.1
在插入模式下按以下任意组合,将退出插入模式。

Alt+e
Alt+w
Alt+j
Alt+k
Alt+h
Alt+l
Alt+.


评论


欢迎来到Vi和Vim bo0k!您的帖子会被简短地标记为低质量,因为它简短且主要是代码-如果您能给出答案的一些解释会更好。您可以进行编辑。 (在我的头上,我碰巧知道这可以在类似xterm的终端中使用,因为Alt +键发送的转义序列实际上包括触发。)

– D. Ben Knoble♦
20年5月4日20:49



Alt + e将发送 e,因此实际上退出了插入模式并发出e命令(转到单词的末尾)。也许在某些情况下是有用的快捷方式,但它不仅可以执行“退出插入模式” :-)您可以在插入模式下使用 看到哪些字符被发送到Vim;将插入文字字符。

–马丁·图尔诺伊(Martin Tournoij)
20年5月5日,1:18