使用 Vim 之后感觉是非常爽,但是有个地方一只觉得挺麻烦,就是在打括号的时候,如果需要跳到括号外,需要很复杂的操作。
举例说明:
if (a == b) return c;
当输入 if 语句时,我是先打 if
, 再打左括号(
,这时候自动补全出右括号,光标自动出现在括号中间。再输入括号内的内容a==b
, 这时候需要从右括号中跳出。 我现在的操作是:Cmd+[
回到命令模式,l
光标向右移一次, a
到括号外,并进入 insert 模式,输入之后的内容。
但是感觉这么做贼麻烦,请问各位有什么比较简单的做法么?谢谢大家!
1 Jirajine 2019-10-12 05:54:12 +08:00 via Android 一般文本编辑器自动补全关闭括号的时候还有一个操作: 当你手动输入右括号时会自动将光标移到括号外面。 不知道你 vim 怎么配置的,我一般在其他编辑器中使用 vim 输入模式,在 insert 下与一般编辑器无异。 |
![]() | 2 reus 2019-10-12 05:54:57 +08:00 A 可以少一次移动 或者直接输入 ) |
![]() | 3 binux 2019-10-12 06:07:38 +08:00 不用自动补全 |
5 rykka 2019-10-12 06:19:13 +08:00 via Android esc+A |
![]() | 6 weixiangzhe 2019-10-12 06:48:09 +08:00 via Android 单行用 ctrl b f 移动 |
![]() |
![]() | 8 yiningyang1228 OP @Jirajine 我之前也是这样配置的,但是感觉有些麻烦 |
![]() | 9 yiningyang1228 OP @reus 学到了,感谢! |
![]() | 10 yiningyang1228 OP @jessun1990 感谢您的回复!我是把 Capslock 和 left-control 换了,这样的话按和 Control 的快捷键方便一些。 |
![]() | 11 yiningyang1228 OP @weixiangzhe 嗯嗯,我之前也是 imap 的方向键映射成了 ctrl b f n p,但是后来感觉这么做还得配置有点麻烦。要不我再去弄回来吧,感谢回复! |
12 DiamondbacK 2019-10-12 07:44:57 +08:00 ![]() 你一定是用了自动补全括号的插件,而这个插件又没有同时考虑到这个问题。 我一直是用的自己写的括号补全,而在打闭括号时,如果右方是相同的闭括号,则自动变成移出。 gayhub: Ace-Who/vim-AutoPair |
13 DiamondbacK 2019-10-12 07:51:06 +08:00 另外,insert mode 下将 jk 映射为 Esc。 |
![]() | 14 hanxiV2EX 2019-10-12 07:55:26 +08:00 via Android w 我按的最多 |
![]() | 15 pkookp8 2019-10-12 07:56:07 +08:00 via Android 不用括号补全 |
![]() | 16 jessun1990 2019-10-12 07:56:59 +08:00 @yiningyang1228 请教一下,我的使用感受是:ctrl 按键使用频率较低。请问兄台把 ctrl 放在 capslock 的原因是?? |
17 xml123 2019-10-12 08:01:10 +08:00 你可以用方向键啊 |
![]() | 18 IsaacYoung 2019-10-12 08:10:23 +08:00 shift + a 在本行最后插入 shift + i 在本行开头插入 |
19 xiulu 2019-10-12 08:13:35 +08:00 via Android @xml123 用了 vim 后,就忘记了什么是方向键。即使方向键只要一次操作,而且命令需要两次操作( ESC,和 A )。但还是会选择后者,因为总感觉伸手到右下角找方向键有种奇怪的感觉,会打断那种流畅感。 最起码在我看来,是这样的。 |
![]() | 20 Sainnhepark 2019-10-12 08:16:00 +08:00 via Android 我记得是 auto pairs 有这样一个功能,当插入模式下位于括号内的时候,再按一次右括号就可以跳转到右括号的位置 |
![]() | 21 wweir 2019-10-12 08:17:39 +08:00 via Android alt+hjkl,另外还有: alt+oO,另起新行 Ctrl+l,选中整行 alt+[],在跳转中前进后退 PS: 我用的编辑器、IDE 全部都配置了这套快捷键。 PPS: 这套快捷键唯一的问题是 Windows 上,部分编辑器不好配置,alt 被 Windows 窗口管理器拦截了 |
![]() | 22 Sparetire 2019-10-12 08:21:01 +08:00 via Android ctrl+o 然后 l |
![]() | 23 Yggdroot 2019-10-12 08:24:27 +08:00 via Android 可以自己定义一些 imap,原生功能 Ctrl-right 可以实现你想要的。 另外,可以使用 snips 插件,一路按 tab 就可以了。 |
![]() | 24 rb6221 2019-10-12 08:27:57 +08:00 via iPhone end 键 |
![]() | 25 gimp 2019-10-12 08:39:46 +08:00 我特意观察了下,我没用括号自动补全的插件,但是打'('会同时打')',Esc, i 回到括号输入内容,Esc, l, a, 空格继续写代码,习惯了的话挺快的,找自己喜欢的方式形成肌肉记忆就行,最重要的是操作流畅就好 |
26 ysn2233 2019-10-12 08:43:39 +08:00 我是把 ctrl+A 和 ctrl+E 在插入模式下 map 为 home 和 end (就是 emacs 模式的跳转到行首和尾部,和终端一样),这样打完直接 ctrl + e |
![]() | 27 guog 2019-10-12 08:45:40 +08:00 via Android |
![]() | 29 guonaihong 2019-10-12 09:01:15 +08:00 %a 或者 %%a |
30 fangquanquan 2019-10-12 09:10:16 +08:00 inoremap <C-h> <Left> inoremap <C-j> <Down> inoremap <C-k> <Up> inoremap <C-l> <Right> 我的配置,尽可能让 i 模式下的操作习惯和普通模式一样。 另外我也把 Capslock 和 left-control 换了,按<C+l>非常方便。 |
![]() | 31 TheWalkingDead 2019-10-12 09:13:54 +08:00 if (a == b) return c; 我一般操作习惯看你要跳转的这个地方的位置,如果)正好在最后一个,我可能直接 ctrl+4 直接到行末尾,然后 i/a/A。 如果括号在中间,我一般是 f 查找然后),然后 i/a/A。 其实习惯了各个键的话,哪种都差不多,没有感觉很累赘。 |
![]() | 32 joshua7v 2019-10-12 09:14:43 +08:00 via iPhone 在系统级别 map 上下左右 因为在非 vim 中很多时候也需要 |
![]() | 33 C02TobNClov1Dz56 2019-10-12 09:15:30 +08:00 idea 飘过, ctrl + shift + enter. 可能是姿势问题, 我用 vim 并没感觉效率提升多少. |
![]() | 34 ScepterZ 2019-10-12 09:16:23 +08:00 可以配置 caps+esdf 来控制上下左右,之前这样用了很长时间,非常舒适,只是需要键盘支持,或者 win 上可以用 ahk |
![]() | 35 jdhao 2019-10-12 09:26:10 +08:00 via Android 原生 vim 没有自动补全括号的功能,可能是你装了插件,使用 verbose imap ( 可以查看是哪个地方设置了这个映射。 我现在用的是 auto-pairs 这个插件,可以自动补全各种括号或者 quotation,输入左括号,自动补全右括号,括号里面输入完毕,再按一次右括号,光标自动移动到右括号的后面,可以继续输入,还是比较方便的,不会打断编辑的工作流 |
![]() | 36 weishu 2019-10-12 09:29:58 +08:00 ctrl + o, A 路过 > ctrl + o: 再插入模式下执行一个命令,然后回到插入模式。 |
![]() | 37 zeny620 2019-10-12 09:30:15 +08:00 如果用的 ‘ Plug 'jiangmiao/auto-pairs' 括号补全插件,内置 alt+n 跳出括号 |
38 ilaipi 2019-10-12 09:42:15 +08:00 我基本上是 kj 退出 insert 然后 按 e 或者 w kj 在 insert 模式映射到了 esc |
![]() | 39 uyhyygyug1234 2019-10-12 09:50:52 +08:00 直接输入 ) 就会跳出了啊 |
![]() | 40 darksword21 PRO 直接 ) +1 |
41 laumm1314 2019-10-12 10:06:19 +08:00 我用这个插件很方便 Plug 'jiangmiao/auto-pairs' |
42 wuhuaji 2019-10-12 10:20:44 +08:00 这个情况我也考虑过。和上面很多朋友类似,都是先切换回普通模式,然后再跳转到需要编辑的地方插入。 这里通常是需要跳转到行末,所以 ESC(或者其他自定义普通模式键) + A 即可。 然而这个按键组合还是有点麻烦,我是自定义了一个: imap aa <ESC>A 编辑模式下,直接 aa 就可跳到行末去编辑。 |
![]() | 43 yiningyang1228 OP @DiamondbacK 我其实是在 Intellij 里面用了 Vim 插件,所以遇到了这个问题,好像没有自动移出的功能。 |
![]() | 44 kindjeff 2019-10-12 10:21:20 +08:00 想了半天为什么我没遇到过,最后发现我是用上下左右 |
![]() | 45 yiningyang1228 OP @jessun1990 因为 mac 系统自带的全局快捷键一般都是和 Ctrl 绑定的,比如往左是 ctrl+b,往右是 ctrl+f, 到行首是 ctrl+a, 当行末是 ctrl+e, 往上是 ctrl+p,往下是 ctrl+n,等等,所以把大小写改成了 ctrl 这样子方便很多。 |
![]() | 46 yiningyang1228 OP @xiulu 对对对我也觉得,收放在主键盘区就很舒服 |
![]() | 47 yiningyang1228 OP @wuhuaji 这个做法有点赞 |
48 MaxTan 2019-10-12 10:52:42 +08:00 切回 Normal 模式然后 A 就直接插入到行尾了 esc 绑定到 Caps Lock 上,习惯性小拇指狂按 Caps Lock,非编辑状态下一直保持 Normal 模式,Normal 模式下用 jkeb 再配合 aAoOiI 快速定位插入内容 vim 用好的窍门就是狂按 Caps Lock,也就是狂切 Normal 模式, 有事没事都抽风狂按那种,啥时候能练出帕金森的小拇指就差不多了 |
![]() | 49 yiningyang1228 OP @MaxTan 哈哈哈太真实了 |
![]() | 50 Xbluer 2019-10-12 17:32:55 +08:00 我一直是这样的 imap (d ()<Esc>i 插入模式下输入 (d 自动不齐括号,并且光标也在中间。 |
51 james122333 2019-10-12 20:57:47 +08:00 imap 加上判断是否在括号内阿 |
![]() | 52 zuorn 2020-10-12 06:40:12 +08:00 我绑定了 option + hjkl 为方向键,所以按下 option + l 就好了。 |