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

可否改变 vim 中 leader 键的按键方式?

  •  
  •   yayiji · 2022-01-20 16:54:38 +08:00 · 1770 次点击
    这是一个创建于 798 天前的主题,其中的信息可能已经有所发展或是发生改变。
    vim 在 normal 模式下的按键模式是连续键击,例如<leader>k ,按键方式是先按 leader 键后按 k ,而不像我们日常使用组合键的模式,按下一个修饰键的同时按住另外的一个键,比如 Ctrl+C 是同时按键两个键。

    可否把 leader 键的按键模式改成组合键的模式?

    vim 的键击模式对于一次性操作没什么问题,但对多次重复操作不是太方便,比如我通常把<leader>k 设置为把当前行上移,当把当前行上移多行时,在 vim 的操作模式下显得不太方便,需要持续地按<leader>k ,实操起来有点繁琐。当然,可以用点(.)操作符来简化这个过程,但点操作符有两个缺点,其一是,有点不太符合我的操作直觉,其二是,对于比较复杂的键位映射无法达到预期效果。
    13 条回复    2022-01-21 13:50:29 +08:00
    pooorguy
        1
    pooorguy  
       2022-01-20 17:25:32 +08:00 via Android
    上移多行一般不都 数字+K 么
    jdhao
        2
    jdhao  
       2022-01-20 17:38:59 +08:00 via Android
    你需要改变思维,让你的 mapping 接收一个数字,只按 <leader>k ,把当前行上移一行,如果前面还有数字,例如先按 5 ,再按<leader>k ,那就把当前行上移五行,都是可以编程实现的。

    下伙子多学学
    jdhao
        3
    jdhao  
       2022-01-20 17:41:54 +08:00 via Android   ❤️ 1
    @jdhao 这个才是完全理解了 vim 的思维,例如按 w ,跳一个单词,但是按下 5w ,会跳 5 个单词,而不是我傻傻的按 5 次 w
    zwpaper
        4
    zwpaper  
       2022-01-20 17:48:43 +08:00
    建议早日弃暗投明,练就 Emacs 八爪鱼组合键大法( Doge
    jheroy
        5
    jheroy  
       2022-01-20 17:49:53 +08:00
    你需要改变的是操作方式,像把当前行移到其他位置这种我一般都是 dd 当前行,然后光标跳到要去的那一行按 p 就行了。 如果用 vim 还按照普通编辑器那样用的话就没必要用 vim 。
    yayiji
        6
    yayiji  
    OP
       2022-01-20 18:23:08 +08:00 via Android
    @jdhao 这个我理解,其实我上述只是取个例子,我想的是有无改变这种按键方式的可能。对于数字的问题,不知道大家平时在使用时使用数字的频率高低,实际上我比较少使用数字,主要是两个问题,其一是数字键比较难按,二是我需要确定是具体数字后再做操作,有一些顿挫,影响操作的流畅,所以基本在极端情况才会使用数字。当然我并未掌握 vim 的哲学
    jdhao
        7
    jdhao  
       2022-01-20 18:54:49 +08:00 via Android
    @yayiji 试试 set relativenumber ,可以看相对行号
    lanlanye
        8
    lanlanye  
       2022-01-20 20:42:53 +08:00
    喜欢组合键要不要试试 Emacs ( Doge
    lanlanye
        9
    lanlanye  
       2022-01-20 20:45:03 +08:00
    正经来说,Vim 好像没有你要的这种形式,但是上移这种操作一般不都是删除整行后跳到目标位置粘贴吗……
    拿你举例的「向上移动一行」来说,完全可以直接 kddp 解决,为了这种功能写函数都没必要,也不会用到 leader 吧
    AEDaydreamer
        10
    AEDaydreamer  
       2022-01-20 21:21:33 +08:00
    对于那个例子我的方案是,对于一般距离的移动还够用:
    -- Move text up and down
    keymap("v", "<A-j>", ":m .+1<CR>==", opts)
    keymap("v", "<A-k>", ":m .-2<CR>==", opts)
    ecnelises
        11
    ecnelises  
       2022-01-20 23:33:17 +08:00
    我猜不行,因为系统 API 甚至底层中断里就是把功能键和其他键的位分开的
    fatestigma
        12
    fatestigma  
       2022-01-21 04:18:24 +08:00
    Emacs + evil ,让你保留 Vim 的键位,然后还可以同时享受 Emacs 组合键 ( Doge
    yayiji
        13
    yayiji  
    OP
       2022-01-21 13:50:29 +08:00 via Android
    @lanlanye 需要重复点按的话,组合键确实更舒服。删除后粘贴确实是通用模式,逻辑上和剪切复制是一样的,适用范围更广,但是如若可以使用拖拽的话,拖拽会更直观一些(比如我有两个并排的窗口,对于移动文件,拖拽胜剪切复制)。我举的例子情境是一样的,在可视范围内移动,所以剪切复制反倒繁琐
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5633 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:42 · PVG 09:42 · LAX 18:42 · JFK 21:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.