VIM下输入一行代码,需要切换模式很多次,感觉特别累(雷)人?

前段时间粗浅的折腾了几天VIM,最近尝试在ATOM下用vim-mode-plus插件写代码,看很多人说用VIM写代码行云流水,我承认在阅读代码时用VIM很方便,各种跳转效率确实高,但具体到写代码时有些操作上的疑惑一直困扰着我,为什么我用起来就觉得不怎么顺畅呢。

举例如下,希望输入

console.log(parseInt("422.123weroz", 16) + Number(getObject(value)));

我的操作方法:
进入插入模式(i,I,o,O等等都可以),然后输入
console.log(parseInt("
因为有自动补全,所以此时会变成
console.log(parseInt("|")) // |表示光标

接着输入string参数
console.log(parseInt("422.123weroz|"))

此时,需要移动光标到双引号的右边,以输入 ",16"。
问题来了。请问你们是先回到普通模式(Esc,ctrl + [, ctrl+c等等),然后按 "l" 键向右移动光标,再进入插入模式,输入 ",16" ?

16输入完成后,再回到普通模式,向右移动光标以越过 ) ,再进入插入模式输入 + Number(

对于这种多个括号、引号嵌套的部分,需要不断的切换模式、移动光标、进入插入模式,感觉非常累人啊?要输入的东西很少,但操作却特别繁琐。

请高人指点指点你们的操作呢?

阅读 8k
7 个回答

vim 用户表示
这种情况下,不用退出Insert Mode,直接输入 ") 就好

补图,
对JS不熟悉,手速比较慢
图片描述

郑重提示:

插入模式下使用任何方式移动光标,会造成undo历史的中断,包括<方向键>,<Home>,<End>。
大部分在插入模式下自动补全引号括号类的插件,都可以重复输入以跳过光标右侧字符,并且不会造成undo历史中断。
undo 历史的中断会影响 u, <c-r>, . 等命令
vim 最强大的命令就是 .
非插件补全造成的光标右侧符号需要跳过,我建议返回普通模式,因为这已经不是一次修改的范围了

按键回放:https://github.com/brookhong/...
录屏:https://github.com/NickeManar...

觉得麻烦就对了, vim 之中,请按你期望的方式去改变它。

http://v.youku.com/v_show/id_...

这时写 LaTeX 的一个例子,一般的程序代码,比它要简单得多,这里也有你说的“跳括号”的这个普遍问题。

如果你安的也是 https://github.com/tpope/vim-... 的话:

console.log(parseInt("422.123weroz|")) // |表示光标

插入模式直接输入 ",16)) + Number.. ,这样不必切换来切换去了。

楼上说的没错,再输一个相同字符就行了。

我更喜欢的是 ctrl + l,主要是觉得右括号、右中括号什么的不好按。.vimrc 里面有这个配置。供参考

" Ctrl + HJKL for arrow keys

inoremap <c-h> <left>
inoremap <c-j> <down>
inoremap <c-k> <up>
inoremap <c-l> <right>

把CapsLock映射为Ctrl,按Ctrl+[切换模式根本不用看键盘,比使用Esc或者按左下角的Ctrl方便多了。

新手上路,请多包涵

习惯就好吧。不建议使用光标左右上下移动键的。按esc键切换模式后,手指可以迅速归位。然后通过l键向后移动。然后根据需要使用a或者i进入插入模式。
还有,你的光标快速移动不知道学全没有。A键可以快速移动光标到本行行末,并且进入插入模式。这个比按home键或者end键更快速。而且视线和手指不会离开正常位置。类似的还有I。快速移动光标,还可以使用w或者e一个单词一个单词的移动。回到行首按数字0键即可。具体移动到某个字符可以使用f命令,可快速精准定位到目标字符。

  1. ",16"的问题,我会直接按右方向键,然后输入,这种我觉得没必要切换模式
  2. 输入后面的“ + Number”,我一般会按键盘上的“End”键跳到一行的末尾,也不需要切换模式
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进