首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

Vim 如何在 insert 状态下高效移动光标到括号外

  •  
  •   yiningyang1228 · 58 天前 · 2016 次点击
    这是一个创建于 58 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 Vim 之后感觉是非常爽,但是有个地方一只觉得挺麻烦,就是在打括号的时候,如果需要跳到括号外,需要很复杂的操作。

    举例说明:

    if (a == b) return c;
    

    当输入 if 语句时,我是先打 if, 再打左括号(,这时候自动补全出右括号,光标自动出现在括号中间。再输入括号内的内容a==b, 这时候需要从右括号中跳出。 我现在的操作是:Cmd+[ 回到命令模式,l光标向右移一次, a到括号外,并进入 insert 模式,输入之后的内容。

    但是感觉这么做贼麻烦,请问各位有什么比较简单的做法么?谢谢大家!

    51 回复  |  直到 2019-10-12 20:57:47 +08:00
        1
    Jirajine   58 天前 via Android
    一般文本编辑器自动补全关闭括号的时候还有一个操作:
    当你手动输入右括号时会自动将光标移到括号外面。

    不知道你 vim 怎么配置的,我一般在其他编辑器中使用 vim 输入模式,在 insert 下与一般编辑器无异。
        2
    reus   58 天前
    A 可以少一次移动

    或者直接输入 )
        3
    binux   58 天前
    不用自动补全
        4
    binux   58 天前
    @binux #3 讲真我是用 60% 键盘的 fn+' 移动光标的
        5
    rykka   58 天前 via Android
    esc+A
        6
    weixiangzhe   58 天前 via Android
    单行用 ctrl b f 移动
        7
    jessun1990   58 天前
    我的方法是,先输入 if (), 再退到命令模式,h 移动到括号处,插入模式,输入 a == b,退到命令模式,再 A 到行尾巴继续操作。
    看上有些复杂了。形成这样习惯的原因是,有时候输入 if ( 时候,右括号没有自动补齐,而整个文件的 syntax highlight 这时出现错误,Ale 插件也会报错。
    我是把我的 linux 和 mac 下的 capslock 按键替换成 esc 键,使用小拇指来控制模式切换。对我来说,较大幅度降低了 esc 模式切换的时间成本。
        8
    yiningyang1228   58 天前
    @Jirajine 我之前也是这样配置的,但是感觉有些麻烦😂
        9
    yiningyang1228   58 天前
    @reus 学到了,感谢!
        10
    yiningyang1228   58 天前
    @jessun1990 感谢您的回复!我是把 Capslock 和 left-control 换了,这样的话按和 Control 的快捷键方便一些。
        11
    yiningyang1228   58 天前
    @weixiangzhe 嗯嗯,我之前也是 imap 的方向键映射成了 ctrl b f n p,但是后来感觉这么做还得配置😂有点麻烦。要不我再去弄回来吧,感谢回复!
        12
    DiamondbacK   58 天前   ♥ 1
    你一定是用了自动补全括号的插件,而这个插件又没有同时考虑到这个问题。
    我一直是用的自己写的括号补全,而在打闭括号时,如果右方是相同的闭括号,则自动变成移出。
    gayhub: Ace-Who/vim-AutoPair
        13
    DiamondbacK   58 天前
    另外,insert mode 下将 jk 映射为 Esc。
        14
    hanxiV2EX   58 天前 via Android
    w 我按的最多
        15
    pkookp8   58 天前 via Android
    不用括号补全😂
        16
    jessun1990   58 天前
    @yiningyang1228 请教一下,我的使用感受是:ctrl 按键使用频率较低。请问兄台把 ctrl 放在 capslock 的原因是??
        17
    xml123   58 天前
    你可以用方向键啊
        18
    IsaacYoung   58 天前
    shift + a 在本行最后插入
    shift + i 在本行开头插入
        19
    xiulu   58 天前 via Android
    @xml123 用了 vim 后,就忘记了什么是方向键。即使方向键只要一次操作,而且命令需要两次操作( ESC,和 A )。但还是会选择后者,因为总感觉伸手到右下角找方向键有种奇怪的感觉,会打断那种流畅感。
    最起码在我看来,是这样的。
        20
    Sainnhepark   58 天前 via Android
    我记得是 auto pairs 有这样一个功能,当插入模式下位于括号内的时候,再按一次右括号就可以跳转到右括号的位置
        21
    wweir   58 天前 via Android
    alt+hjkl,另外还有:
    alt+oO,另起新行
    Ctrl+l,选中整行
    alt+[],在跳转中前进后退

    PS: 我用的编辑器、IDE 全部都配置了这套快捷键。
    PPS: 这套快捷键唯一的问题是 Windows 上,部分编辑器不好配置,alt 被 Windows 窗口管理器拦截了
        22
    Sparetire   58 天前 via Android
    ctrl+o 然后 l
        23
    Yggdroot   58 天前 via Android
    可以自己定义一些 imap,原生功能 Ctrl-right 可以实现你想要的。
    另外,可以使用 snips 插件,一路按 tab 就可以了。
        24
    janus77   58 天前 via iPhone
    end 键
        25
    gimp   58 天前
    我特意观察了下,我没用括号自动补全的插件,但是打'('会同时打')',Esc, i 回到括号输入内容,Esc, l, a, 空格继续写代码,习惯了的话挺快的,找自己喜欢的方式形成肌肉记忆就行,最重要的是操作流畅就好
        26
    ysn2233   58 天前
    我是把 ctrl+A 和 ctrl+E 在插入模式下 map 为 home 和 end (就是 emacs 模式的跳转到行首和尾部,和终端一样),这样打完直接 ctrl + e
        27
    guog   58 天前 via Android
    @jessun1990 命令行快捷键用 Ctrl 用的多
    +a 行首
    +e 行尾,自动补全
    +c /+d 取消
        28
    guog   58 天前 via Android
    @guog vim 块编辑+v
        29
    guonaihong   58 天前
    %a 或者
    %%a
        30
    fangquanquan   58 天前
    inoremap <C-h> <Left>
    inoremap <C-j> <Down>
    inoremap <C-k> <Up>
    inoremap <C-l> <Right>

    我的配置,尽可能让 i 模式下的操作习惯和普通模式一样。 另外我也把 Capslock 和 left-control 换了,按<C+l>非常方便。
        31
    TheWalkingDead   58 天前
    if (a == b) return c;

    我一般操作习惯看你要跳转的这个地方的位置,如果)正好在最后一个,我可能直接 ctrl+4 直接到行末尾,然后 i/a/A。

    如果括号在中间,我一般是 f 查找然后),然后 i/a/A。

    其实习惯了各个键的话,哪种都差不多,没有感觉很累赘。
        32
    joshua7v   58 天前 via iPhone
    在系统级别 map 上下左右
    因为在非 vim 中很多时候也需要
        33
    chengyiqun   58 天前
    idea 飘过, ctrl + shift + enter.
    可能是姿势问题, 我用 vim 并没感觉效率提升多少.
        34
    ScepterZ   58 天前
    可以配置 caps+esdf 来控制上下左右,之前这样用了很长时间,非常舒适,只是需要键盘支持,或者 win 上可以用 ahk
        35
    jdhao   58 天前 via Android
    原生 vim 没有自动补全括号的功能,可能是你装了插件,使用 verbose imap ( 可以查看是哪个地方设置了这个映射。

    我现在用的是 auto-pairs 这个插件,可以自动补全各种括号或者 quotation,输入左括号,自动补全右括号,括号里面输入完毕,再按一次右括号,光标自动移动到右括号的后面,可以继续输入,还是比较方便的,不会打断编辑的工作流
        36
    weishu   58 天前
    ctrl + o, A 路过

    > ctrl + o: 再插入模式下执行一个命令,然后回到插入模式。
        37
    zeny620   58 天前
    如果用的 ‘ Plug 'jiangmiao/auto-pairs' 括号补全插件,内置 alt+n 跳出括号
        38
    ilaipi   58 天前
    我基本上是 kj 退出 insert 然后 按 e 或者 w

    kj 在 insert 模式映射到了 esc
        39
    uyhyygyug1234   58 天前
    直接输入 ) 就会跳出了啊
        40
    darksword21   58 天前
    直接 ) +1
        41
    laumm1314   58 天前
    我用这个插件很方便 Plug 'jiangmiao/auto-pairs'
        42
    wuhuaji   58 天前
    这个情况我也考虑过。和上面很多朋友类似,都是先切换回普通模式,然后再跳转到需要编辑的地方插入。

    这里通常是需要跳转到行末,所以 ESC(或者其他自定义普通模式键) + A 即可。

    然而这个按键组合还是有点麻烦,我是自定义了一个:
    imap aa <ESC>A

    编辑模式下,直接 aa 就可跳到行末去编辑。
        43
    yiningyang1228   58 天前
    @DiamondbacK 我其实是在 Intellij 里面用了 Vim 插件,所以遇到了这个问题😂,好像没有自动移出的功能。
        44
    kindjeff   58 天前
    想了半天为什么我没遇到过,最后发现我是用上下左右
        45
    yiningyang1228   58 天前
    @jessun1990 因为 mac 系统自带的全局快捷键一般都是和 Ctrl 绑定的,比如往左是 ctrl+b,往右是 ctrl+f, 到行首是 ctrl+a, 当行末是 ctrl+e, 往上是 ctrl+p,往下是 ctrl+n,等等,所以把大小写改成了 ctrl 这样子方便很多。
        46
    yiningyang1228   58 天前
    @xiulu 对对对我也觉得,收放在主键盘区就很舒服
        47
    yiningyang1228   58 天前
    @wuhuaji 这个做法有点赞👍
        48
    MaxTan   58 天前
    切回 Normal 模式然后 A 就直接插入到行尾了

    esc 绑定到 Caps Lock 上,习惯性小拇指狂按 Caps Lock,非编辑状态下一直保持 Normal 模式,Normal 模式下用 jkeb 再配合 aAoOiI 快速定位插入内容

    vim 用好的窍门就是狂按 Caps Lock,也就是狂切 Normal 模式, 有事没事都抽风狂按那种,啥时候能练出帕金森的小拇指就差不多了
        49
    yiningyang1228   58 天前
    @MaxTan 哈哈哈太真实了
        50
    Xbluer   58 天前
    我一直是这样的
    imap (d ()<Esc>i
    插入模式下输入 (d 自动不齐括号,并且光标也在中间。
        51
    james122333   58 天前
    imap 加上判断是否在括号内阿
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1015 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 30ms · UTC 19:06 · PVG 03:06 · LAX 11:06 · JFK 14:06
    ♥ Do have faith in what you're doing.