V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
AndyAO
V2EX  ›  问与答

有没有 Vim 操作智能提醒/纠正工具?

  •  
  •   AndyAO · 2021-01-30 12:23:05 +08:00 · 1564 次点击
    这是一个创建于 1412 天前的主题,其中的信息可能已经有所发展或是发生改变。

    2021 年了,你还在用 Vim 吗(一份 vim 导航快捷键) - V2EX

    看到这篇帖子,发下了学习 Vim 的愿望,没想到这么快就行动了


    学习 Vim 的曲线真的很陡峭 !

    如果有一款插件就好了

    当进行某个比较愚蠢的操作时,能够直接给出更短的 Vim 操作

    这样的话学习速度必然会提升很多


    对于我这个新手来说,明明还知道有更好的操作

    但就是没办法用,因为需要翻阅资料就打断现在的思路了,真的有时候挺纠结的

    看文章上说要完全适应的话,大约也要两周[^1]


    在适应阶段,操作效率比用普通的方式往往是更低的

    而且有很强的割裂感


    当然这个工具听起来就不是那么好实现,我不确定是否真的存在,去网上搜过,没有找到什么线索,所以发在 V2EX 问问.

    [1]:简明 Vim 练级攻略 | 酷 壳 - CoolShell

    22 条回复    2021-01-31 08:51:05 +08:00
    zeroDev
        1
    zeroDev  
       2021-01-30 12:37:23 +08:00 via Android   ❤️ 1
    coc.nvim
    AndyAO
        2
    AndyAO  
    OP
       2021-01-30 12:37:37 +08:00
    不知道有人是否感兴趣

    如果有那么一款插件的话,我觉得名字可以叫**Vim 教练**.
    zeroDev
        3
    zeroDev  
       2021-01-30 12:38:59 +08:00 via Android   ❤️ 1
    补全这种东西是一种叫做语言服务器标准的东西实现的,是单独的一种软件,跨平台跨工具的
    AndyAO
        4
    AndyAO  
    OP
       2021-01-30 12:39:07 +08:00
    当然我这里说的 Vim

    不局限于 Vim 编辑器本身

    指的一切主流编辑器平台上的 Vim 模式

    例如 Visual Studio Code/Visual Studio/JetBrains 等
    zeroDev
        5
    zeroDev  
       2021-01-30 12:39:46 +08:00 via Android
    哦,看错了
    你可以看看 一个安卓 APP
    Vim Master
    AndyAO
        6
    AndyAO  
    OP
       2021-01-30 12:42:46 +08:00
    @zeroDev
    安卓端...
    令人绝望.
    主要是不会在这种平台上写代码的 ε=(´ο`*)))

    那你将我的想法看成了什么?
    是什么原因促使你推荐 coc?
    AndyAO
        7
    AndyAO  
    OP
       2021-01-30 12:46:54 +08:00   ❤️ 1
    @zeroDev #5 我好像有点懂了,你以为我是在问'有没有 Vim 的代码自动补全工具'.
    这个当然有了
    对于老手来说
    看到这个标题,首先不这样想也是自然而然的
    superrichman
        8
    superrichman  
       2021-01-30 12:54:06 +08:00 via iPhone
    没啥好纠结的 用自己习惯的操作就是最好的
    AndyAO
        9
    AndyAO  
    OP
       2021-01-30 13:38:59 +08:00
    @zeroDev #5
    问个问题

    如何在 Vim 中复制粘贴文本?
    当然我知道具体用什么命令!我只是不知道该如何'思考'这个问题.

    ![]( https://cdn.jsdelivr.net/gh/Andy-AO/GitHubPictureBed/img/20210130133752.png)

    目前我的想法是用`y<number>w`,但是我好像要先数一下 number,那这个速度有点慢了.
    首先用 w 数了,才发现是 9 个,因为有各种符号和单词,所以我好像不太会数.

    熟练的人是能看一眼就能数出来吗?
    如果是这样的话,我想应该多练习练习数 number.

    还是说有更好的操作方法?
    xujiahui
        10
    xujiahui  
       2021-01-30 13:54:15 +08:00
    最近刚好在看«Vim 实用技巧» 边看边用 还挺舒服的
    AndyAO
        11
    AndyAO  
    OP
       2021-01-30 14:00:08 +08:00
    @xujiahui #9 俺也举个爪
    whenov
        12
    whenov  
       2021-01-30 14:03:56 +08:00 via iPhone   ❤️ 1
    @AndyAO 先在 visual 模式下多次 w 或 W 或 t 或 f 选中,再 y 复制。
    Leviathann
        13
    Leviathann  
       2021-01-30 14:10:40 +08:00 via iPhone   ❤️ 1
    @AndyAO
    如果复制终点的字符比较特殊,那直接 yt 或者 yf 接终点字符
    比如 abcdefc
    光标在 a
    那 yte 就是复制 a 到 d,yfe 就是 a 到 e

    ytc 就是 a 到 c,y2tc 就是复制到第二个 c

    另外还有快速查找跳转的插件比如 easymotion
    y 后面接跳转操作就是从当前复制到哪个字符
    AndyAO
        14
    AndyAO  
    OP
       2021-01-30 14:54:35 +08:00
    @zeroDev @xujiahui @whenov @Leviathann

    目前来看最佳答案是 ya`

    学好 Vim 真不容易

    如果谁能开发出 Vim 教练就太好了
    AndyAO
        15
    AndyAO  
    OP
       2021-01-30 15:07:23 +08:00
    @Leviathann #12
    你这个思路和 ya`的思路可以互相补充
    他这个的好处就是只要在包裹体的内部就行
    你这个普适性更强一些

    查了一下,在我看的那本书里面第 48 页才开始讲这个内容
    看来我还要学习很长一段时间
    Numbcoder
        16
    Numbcoder  
       2021-01-30 15:13:53 +08:00
    Vim / Emacs 的入门门槛在于没有一个开箱即用的环境,需要自己一点一点去找插件,配置成自己舒服的使用方式,所以我是强烈不建议完全复制别人配置或者寻找一个所谓唯一最佳的操作方式,很多东西都是在慢慢使用中找到最适合自己的,所以没必要强制去训练,几年以后会形成一套属于自己的配置,成为你的终生财富
    Leviathann
        17
    Leviathann  
       2021-01-30 19:16:12 +08:00 via iPhone
    @AndyAO 我没看图
    原来说的是这个
    可以用%跳转的 pair 都是 textobject
    包括各种引号括号
    IgniteWhite
        18
    IgniteWhite  
       2021-01-30 21:14:13 +08:00 via iPhone
    @Numbcoder 同感,这是个很私人的东西,需要在使用中查找参考别人的方案,然后积累到自己最顺手的设置里。我从本科第一次学习 Vim,5 年之后才有了自己的感触配了适合自己的 vimrc
    https://github.com/g6ai/dotfiles
    还在不断改进中,欢迎交流
    DrakeXiang
        19
    DrakeXiang  
       2021-01-30 22:52:02 +08:00
    我感觉这种东西不可能出现,一个是制作难度的问题,要识别你的意图不容易,新手可能需要三步才能达到自己的目的,高手用一步就可以,但是 vim 怎么识别你的目的是在哪一步达到?

    另一个是 vim 有很多命令,但是常用的就这么多,之前见过一个网站,给定一段文本和目标,然后用 vim 来实现,最后以字符长度从短到长排序,里面就能看到很多不认识的命令和 hack,学习这种骚操作并不一定能提高效率,因为有些实现用常用命令更简单,高级操作虽然字符数少了,但是心智负担更大,要么是要学,要么是要记,要么是要算,当然有些也确实能学到更简便的方法。

    我的建议是先熟悉常用的命令,然后针对自己经常碰到的需求自己做命令组合的优化或者直接上网搜,能用英文搜就更好,中文我很怀疑有没有搜索结果,如果实在找不到也可以发贴问或者加 vim 的群问,然后可以看一看一些 vim 布道师的演讲啥的,里面针对的一般都是不了解 vim 或者 vim 新手,场景比较常见。总之要想用得很溜需要一个积累的过程。

    举个例子:快速移动到对应的行
    之前很长时间我是用 j 、k 来移动,但是这样发现在大范围的移动比较笨也慢,后来配合“相对行号” 使用 数字 + j 、k 来实现快了很多,但是在一屏中间大范围移动时有时候觉得行号多了还是有点麻烦,就再配合 shift + h/m/b 移动到屏幕大概的位置,缩短了相对举例之后然后再进行小范围移动就舒服一点
    DrakeXiang
        20
    DrakeXiang  
       2021-01-30 22:53:29 +08:00
    @DrakeXiang 写错了。。shift + H/M/L
    AndyAO
        21
    AndyAO  
    OP
       2021-01-31 08:20:42 +08:00
    @DrakeXiang #17

    "新手可能需要三步才能达到自己的目的,高手用一步就可以,但是 vim 怎么识别你的目的是在哪一步达到"

    这个不是靠 Vim 来识别的,Vim 本身没有这么强大的功能,这是叫做**Vim 教练**的工具实现的.
    实现这个工具,在现在这个年代,不是什么很难的问题.
    用传统的算法实现不了是有可能的,至少实现的路径不是一眼能够看出来的.
    但考虑到有机器学习这种东西,这个事情就显得小儿科了.

    更短的操作不一定会提高效率,这个的确如此,但类似 Vim 操作这样的东西,去网上搜索的效率并不高,而且常常有遗漏.如果有软件能够尽可能的给出比较短的操作,然后供人挑选的话,那是非常好的.而且哪些容易通过练习形成肌肉记忆,这个也是可以排序的.也可以根据这个维度给出建议.

    比自己去网上找要方便的多,由于寻找的过程是系统化的,所以效率高,令人感到非常放心.

    把复杂的事情变简单和自动化,是所有程序员的应做的工作,也是令人兴奋和激动的,尤其是工作比较难,比较出人意料的情况下.我现在的能力没有办法实现,但是我已经记在本本上了,也许有一天你就会看到我发布这个软件的消息.

    你的那个建议就是我现在正在做的事情.

    遇到不懂的,在网上搜了没有满意的答案,我在群里和 V2 都问了.
    过了好长一段时间,我找到了自己想要的东西,这个当然比纯自己琢磨要好些.
    weixiangzhe
        22
    weixiangzhe  
       2021-01-31 08:51:05 +08:00 via Android
    先在 ide 或编辑器里装插件玩吧,vim 配置啥的太花时间了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1169 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:49 · PVG 01:49 · LAX 09:49 · JFK 12:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.