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

vim 在编辑/插入模式下快速移动光标你们一般怎么弄?

  •  
  •   shijingshijing · 2019-06-23 23:10:04 +08:00 · 13185 次点击
    这是一个创建于 1978 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我个人是 page up,page down,上下左右方向键直接上的,这个也是 SlayerS BoxeR 当年打星际的手法(暴露年龄)

    想问问有多少人是 Esc 切换到 Normal Mode 下,然后 hjkl 一顿操作的?

    也看见有人改了配置按住 Ctrl 配合 hjkl 来操作,这样感觉不通用。

    或者还有其他方法?

    71 条回复    2019-11-21 12:59:47 +08:00
    billlee
        1
    billlee  
       2019-06-23 23:15:20 +08:00
    我是不用方向键的,手要离开主键盘区,效率太低了。
    shijingshijing
        2
    shijingshijing  
    OP
       2019-06-23 23:16:05 +08:00
    @billlee 是用 Esc 在两种模式之间切来切去么?
    starrycat
        3
    starrycat  
       2019-06-23 23:18:23 +08:00 via Android   ❤️ 2
    m-hjkl,不过很少用到
    PTLin
        4
    PTLin  
       2019-06-23 23:25:32 +08:00
    有时候需要移动一下光标的我一般用 C-o 加 hjkl 什么的,同时设置了个快捷键用来跳转到行尾,还设置了 m-hjkl 但也是很少用。
    vyronlee
        5
    vyronlee  
       2019-06-23 23:29:40 +08:00 via iPhone
    我所有移动操作都是在 Normal 模式下
    KasuganoSoras
        6
    KasuganoSoras  
       2019-06-23 23:31:03 +08:00
    按下 Esc,然后输入
    :set mouse=a
    开始体验鼠标点击移动光标的快乐 √
    KasuganoSoras
        7
    KasuganoSoras  
       2019-06-23 23:33:35 +08:00   ❤️ 1
    当你想要切换回普通编辑模式的时候,只需要
    :set mouse=c
    就行了
    KannaMakino
        8
    KannaMakino  
       2019-06-23 23:37:17 +08:00 via iPhone
    hjkl ✖️
    ↑↓←→ ✔️
    billlee
        9
    billlee  
       2019-06-23 23:43:28 +08:00
    @shijingshijing #2 是啊,写代码的时候也很少会需要翻页移动的啊,一般就是附近几个词、几行之间移动。大范围的移动我一般直接用搜索或 tag 跳转。
    newtype0092
        10
    newtype0092  
       2019-06-23 23:47:04 +08:00
    正常不都是 Esc 出来么?左手点下 Esc 右手 hjkl 衔接很流畅,习惯了后点 Esc 完全不经过大脑,好像系统自动帮你按的一样。
    weixiangzhe
        11
    weixiangzhe  
       2019-06-23 23:49:08 +08:00 via iPhone
    w b f 行内移动
    行首^ 行尾$
    c u 或 c d 翻页之类的
    insert 模式绑定为 emac 的 c npbf
    也有
    ...
    vim 里移动可以学几天吧 还有用 easy motion 之类的,vim 移动是主要功能
    deyilee
        12
    deyilee  
       2019-06-23 23:49:16 +08:00
    设置了按键绑定
    之前在用 gvim 时,双击,,(英文逗号)是光标右移动
    现在用 vscode,就用 alt+hjkl 来控制 insert 模式下的光标上下左右
    deyilee
        13
    deyilee  
       2019-06-23 23:49:44 +08:00
    按 esc 毕竟要切换模式,不是太流畅
    jdhao
        14
    jdhao  
       2019-06-23 23:52:23 +08:00 via Android
    不退出插入模式,大范围移动,不如使用 vscode
    weixiangzhe
        15
    weixiangzhe  
       2019-06-23 23:57:17 +08:00 via iPhone
    esc 主要问题是太远,绑为 ctrl 加 esc 是最合理的
    寄出老键盘图
    https://i.bmp.ovh/imgs/2019/06/c65299aaa4766e35.jpeg

    或者直接按 ctrl [ 和绑定位 jk 也是不错的
    weixiangzhe
        16
    weixiangzhe  
       2019-06-23 23:58:04 +08:00 via iPhone
    pkookp8
        17
    pkookp8  
       2019-06-24 00:16:03 +08:00 via Android
    这时候我就放弃 hjkl 用方向键了
    20015jjw
        18
    20015jjw  
       2019-06-24 00:42:27 +08:00 via Android
    当然按 esc 啊.. vim 就是这么用的..
    esc/ctrl dual role caplocks 学习一下?
    scriptB0y
        19
    scriptB0y  
       2019-06-24 01:27:59 +08:00
    Emacs Mode,Ctrl-a Ctrl-e Ctrl-b Ctrl-f 之类的。
    scriptB0y
        20
    scriptB0y  
       2019-06-24 01:28:48 +08:00
    congeec
        21
    congeec  
       2019-06-24 01:51:44 +08:00 via iPhone
    单行编辑,emacs 更高效。所以我在 vim 里加了 emacs 绑定
    StarryFK
        22
    StarryFK  
       2019-06-24 01:56:00 +08:00 via Android
    用熟了其实也感觉 hjkl 作为方向键很顺手的,甚至有些游戏也是采用 hjkl 作为方向键的
    SingeeKing
        23
    SingeeKing  
       2019-06-24 02:11:23 +08:00
    难道不是 WE
    silencefly
        24
    silencefly  
       2019-06-24 02:38:22 +08:00 via iPhone
    把 esc 映射到 kj 手不用离开键盘
    szzhiyang
        25
    szzhiyang  
       2019-06-24 02:45:30 +08:00
    Power Keys 的空格编辑功能

    https://PowerKeys.GitHub.io/space
    szzhiyang
        26
    szzhiyang  
       2019-06-24 02:47:52 +08:00
    等 Power Keys 的空格编辑功能流行起来后,Vim 和 Emacs 就再也不会有新用户了。
    shihira
        27
    shihira  
       2019-06-24 03:41:11 +08:00 via Android
    我会比较 prefer 把上下左右 map 到 alt+kjhl,系统全局
    wweir
        28
    wweir  
       2019-06-24 07:49:55 +08:00 via Android
    同全局 alt+hjkl。而且,自己写配置统一三大桌面下 Vim vscode zsh 的快捷键
    mengzhuo
        29
    mengzhuo  
       2019-06-24 08:17:34 +08:00 via iPhone
    买一块可编程键盘,把 CapsLock + AWSD 换成光标
    darknoll
        30
    darknoll  
       2019-06-24 08:40:40 +08:00
    用箭头的就别用 vim 了吧
    nicevar
        31
    nicevar  
       2019-06-24 08:47:09 +08:00
    数字直接接 hjkl 不是更快
    TrembleBeforeMe
        32
    TrembleBeforeMe  
       2019-06-24 08:57:44 +08:00
    学习 emacs 设置一个修饰键
    HannibaI
        33
    HannibaI  
       2019-06-24 09:17:03 +08:00   ❤️ 1
    vim 按 ctrl + [ 也可以退出编辑模式,再把 caps lock 映射到 ctrl,就可以按 caps lock+[ 退出编辑模式,手基本不需要离开键盘。
    catinsides
        34
    catinsides  
       2019-06-24 09:23:27 +08:00
    按行 C-E C-Y
    按 1/2 C-U C-D
    按页 C-F C-B
    当前行居中 zz

    非要用 hjkl 的话,我一般是 5j5j...
    xiaocaibaozi
        35
    xiaocaibaozi  
       2019-06-24 09:28:51 +08:00 via Android
    我把<Leader>设置成;,把 esc 映射成<Leader><Leader>和;;,然后不管中英文,按两下小指就行了再用 hjkl 移动。
    loading
        36
    loading  
       2019-06-24 09:32:17 +08:00 via Android
    我选择了用鼠标滚轮和方向键
    ahonn
        37
    ahonn  
       2019-06-24 09:43:08 +08:00
    什么,模式难道不是编辑器自己切的么?
    codelegant
        38
    codelegant  
       2019-06-24 09:55:51 +08:00
    我的习惯,将 双击 j 绑定为 ESC,然后 w e b ^ $ 这五个键定位列。行间移动,较大距离就行号 + G,小范转就 j,k。
    poisedflw
        39
    poisedflw  
       2019-06-24 09:57:36 +08:00
    难道不是 Ctrl+C,然后各种移动?
    ech0x
        40
    ech0x  
       2019-06-24 10:43:02 +08:00 via iPhone
    你不习惯切回 normal 模式为什么要用 vim 呢?
    ech0x
        41
    ech0x  
       2019-06-24 10:44:13 +08:00 via iPhone
    @szzhiyang 你这个还要按 0.1 秒,我按一下 esc 键用不了这么长时间。
    ynyounuo
        42
    ynyounuo  
       2019-06-24 10:48:06 +08:00 via iPhone
    真的所谓 vim 「高手」都是摒弃 hljk 的,参考 vimgolf 的大部分高级不作弊的解法。当然实际上并不需要这么苛刻,我装了 hard mode 没两天卸载了。
    cstj0505
        43
    cstj0505  
       2019-06-24 10:54:26 +08:00
    真羡慕你们写代码快的
    除了写文档,写代码时候光逻辑我都得考虑半天,代码之间的移动在整个过程中占比非常非常小
    szzhiyang
        44
    szzhiyang  
       2019-06-24 11:05:08 +08:00
    @ech0x 我写代码时手腕丝毫不动,比你反复按 Esc 键舒服太多了,不服不行。
    hellodudu86
        45
    hellodudu86  
       2019-06-24 11:07:39 +08:00
    ctrl+[
    hjkl+web+easy motion
    MaxTan
        46
    MaxTan  
       2019-06-24 11:15:06 +08:00
    平时多是 normal 模式状态,Casps Lock 绑定 esc 习惯性有事没事都按下,只有编辑的时候按 o、i、a、O、I、A 切插入模式
    光标只用在 normal 模式下移动,小范围内移动 h、j、k、l、e、r、^、$,大范围 ctrl+f、ctrl+b、gg、G、行号 gg
    使用方向键移动光标右手会离开主键盘区的,这样就一点也不 vim 了
    Rorshach
        47
    Rorshach  
       2019-06-24 11:17:36 +08:00
    我用 vim,而且是鼠标大师
    lzhCoooder
        48
    lzhCoooder  
       2019-06-24 11:21:13 +08:00
    Esc 返回 normal 然后 hjkl 的举手
    jon
        49
    jon  
       2019-06-24 14:01:50 +08:00
    浏览器我都用 vim 模式操作
    shawndev
        50
    shawndev  
       2019-06-24 14:19:49 +08:00
    上下可以通过行号跳转,左右暂时无解。其实我觉得 vscode 都已经支持远程编辑了,干嘛还要和自己过不去呢,难道你们都不需要列编辑,不需要格式化的吗。
    70k
        51
    70k  
       2019-06-24 14:35:58 +08:00
    小范围肯定 hjkl
    稍大范围 ctrl+u ctrl+d

    最佳的操作方式是 有自己的命名规范
    搜索关键字然后用 n 跳转到相应位置

    恨不得把全部代码写到一个文件里面 当然还有 buffer 可以用 : )
    neoblackcap
        52
    neoblackcap  
       2019-06-24 15:36:19 +08:00
    我一般都是按 Esc,用 vim 就是不想用那么多组合键。
    MrCard
        53
    MrCard  
       2019-06-24 15:39:49 +08:00
    可以将 esc 改成~键,不然实在太远了
    Akiyu
        54
    Akiyu  
       2019-06-24 15:46:43 +08:00
    小范围:
    还是方向键好使

    大范围:
    C-u C-d

    知道准确的范围;
    n + hjkl (其中 n 是行数)

    邪门歪道 ( 保命):
    设置鼠标支持, 具体 google
    Sparetire
        55
    Sparetire  
       2019-06-24 15:53:48 +08:00 via Android
    esc 映射 jk
    lancelock
        56
    lancelock  
       2019-06-24 16:32:29 +08:00
    60 键盘没有方向键 pageUP pagedown, 用着用着你就习惯模式切换了
    andy2415
        57
    andy2415  
       2019-06-24 17:13:11 +08:00
    空格 + hjkl
    hoyixi
        58
    hoyixi  
       2019-06-24 17:17:42 +08:00
    除了光标移动快捷键

    还有跳到下个词、下个句子、下个标点、下个括号、下个匹配、下个....等等的快捷键, 把“下”换成“上”同理


    这里提到的只是一小部分,想知道更多建议自己去学
    lenvens
        59
    lenvens  
       2019-06-24 17:30:07 +08:00
    hjkl esc 挺顺手的
    james122333
        60
    james122333  
       2019-06-24 17:51:54 +08:00
    基本的就很好用了 善用跳字 不满意还有
    tiedan
        61
    tiedan  
       2019-06-24 17:53:45 +08:00
    别用 ESC 太远了不好按,可以用 ctrl + [
    james122333
        62
    james122333  
       2019-06-24 17:54:51 +08:00
    https://vim.fandom.com/wiki/Using_marks
    https://github.com/easymotion/vim-easymotion
    都可以参考 vim 操作模式是重点 但 vim 简单扩充性也是重点
    不满意自己写 自己掌控编辑器 而不是被编辑器掌控...
    除非你就是想拿现成的...
    james122333
        63
    james122333  
       2019-06-24 18:01:04 +08:00
    vim 就算你只会 shell 也可以扩充
    leky
        64
    leky  
       2019-06-24 18:09:35 +08:00
    inoremap <C-b> <C-o>h
    inoremap <C-f> <C-o>l
    inoremap <M-b> <C-o>b
    inoremap <M-f> <C-o>e
    inoremap <C-a> <C-o>^
    inoremap <C-e> <C-o>$
    inoremap <C-w> <C-g>u<C-w>
    inoremap <C-u> <C-g>u<C-u>
    Sainnhepark
        65
    Sainnhepark  
       2019-06-24 18:16:19 +08:00 via Android
    shift+上下 一次移动五行
    shift+左右 移动到行首行尾
    再来两个插件:
    vim-matchup
    sneak
    darkbill
        66
    darkbill  
       2019-06-24 22:52:54 +08:00
    同 24 楼的 @silencefly +1
    把 esc 映射到 jk 手不用离开键盘
    SmallZheng
        67
    SmallZheng  
       2019-06-25 09:42:13 +08:00
    fd 映射 esc,手都不用移动。
    Samuelcc
        68
    Samuelcc  
       2019-06-25 12:31:20 +08:00 via Android
    不退出插入模式移动不是 vim 的用法吧。。
    vim 的 pattern 就是应该完成一个操作就 esc 的
    这样你撤销 /恢复也是比较符合逻辑的
    lampxiongdi
        69
    lampxiongdi  
       2019-07-01 16:28:36 +08:00
    inoremap jj <ESC>
    diverless
        70
    diverless  
       2019-11-21 00:54:10 +08:00
    @xiaocaibaozi
    我把<Leader>设置成;,把 esc 映射成<Leader><Leader>和;;,然后不管中英文,按两下小指就行了再用 hjkl 移动。
    ---
    我按你的提示设置了,确实很好用:
    -------------
    let maplead = ";"
    inoremap <leader><leader> <ESC>
    inoremap ;; <ESC>
    ------------
    但有一个问题:在中文状态的 insert 模式下,你确实可以切换回 normal 模式。但是,你的中文输入法没办法同时切换回英文呀,所以你这时候是无法使用 hjkl 的,对不?

    除非你已经设置了 smartim 这类在退出 insert 模式同时自动切换回英文的扫插件。
    xiaocaibaozi
        71
    xiaocaibaozi  
       2019-11-21 12:59:47 +08:00 via Android
    @diverless 是我没说清楚。其他平台我没试过,windows 下的话 win7 我是在切到了 normal 模式的时候按一下 shift 把输入法切成英文再 hjkl 一通操作,或者只是单方向移动的话按了数字再按好 hjkl 之一,按好 a 或者 i 再回车。本来想整个插件自动切换中英文输入法,但那时候换用 win10 了,不知道为啥 win10 里 gvim 切成 normal 模式的时候就微软输入法自己就切成英文模式,也就没折腾了。如果没有微软输入法的这个自动切英文功能,确实需要插件帮助。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3399 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:46 · PVG 08:46 · LAX 16:46 · JFK 19:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.