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

学习到了 Vim 中的一个新概念: exclusive 和 inclusive

  •  
  •   jdhao · 2019-05-18 08:22:29 +08:00 · 4870 次点击
    这是一个创建于 2051 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果你经常使用 dwde,你会发现两者的表现不太一致,另外 db 并不能删除当前光标所在处的字符,很蛋疼,为什么是这样呢?原来和 Vim 中一个动作的 exclusivity 有关。

    认真学习了一下,写了一篇短文: https://jdhao.github.io/2019/05/18/nvim_exclusive_inclusive_motion/

    不知道有多少人不知道的,欢迎讨论。。

    14 条回复    2019-05-18 21:31:43 +08:00
    vitovan
        1
    vitovan  
       2019-05-18 08:28:13 +08:00 via Android
    学习了,虽然没看太明白,VIM 太难了
    jdhao
        2
    jdhao  
    OP
       2019-05-18 08:31:39 +08:00
    @vitovan 哪里没明白。。这个这是一个简单的概念哈~
    carlclone
        3
    carlclone  
       2019-05-18 08:55:01 +08:00 via Android
    通常使用 ciw 删除和修改
    conanforever22
        4
    conanforever22  
       2019-05-18 08:58:47 +08:00   ❤️ 1
    学习了, 平时用 df{char} / dt{char} , 看 help 发现 f{char}/t{char}都是 inclusive, 加了 v 可以转换为 exclusive
    thedrwu
        5
    thedrwu  
       2019-05-18 09:03:05 +08:00 via Android
    手指对着空气比划了一下才想起来 dw 和 de 有什么区别。
    跟形码输入汉字一样,成为了肌肉记忆之后看着字母不知道它要干什么。。
    jdhao
        6
    jdhao  
    OP
       2019-05-18 09:16:20 +08:00 via Android
    @conanforever22 自带的 f 只能找一个字符,不精确,我用 vim-sneak 代替,可以找两个字符,精确度大大提升,基本上三个按键跳到眼睛能看到的任何地方
    shaco
        7
    shaco  
       2019-05-18 09:17:19 +08:00   ❤️ 1
    @jdhao #2 为啥我觉得 de 才是 exclusive,dw 才是 inclusive。因为根据这两个单词的意思,exclusive 的意思应该是把最后一个字符排除在外,也就是不删除最后一个字符。而 inclusive 应该是删除最后一个字符
    jdhao
        8
    jdhao  
    OP
       2019-05-18 09:27:19 +08:00 via Android   ❤️ 1
    @shaco 你还没理解正确,以 de 为例,e 跳到 hello 的 o 处,因为 e 是 inclusive,所以从 h 到 o 的所有字符都被删除了,如果 e 是 exclusive,那么字符 o 不会被删除
    vitovan
        9
    vitovan  
       2019-05-18 10:09:31 +08:00 via Android   ❤️ 1
    @shaco
    @jdhao

    我把这个贴到这里,可能会帮助理解:

    ```
    Many commands that text are made from an operator and a motion.
    The format for a follows:

    d motion

    Where:
    d - is the delete operator.
    motion - is what the operator will operate on (listed below).

    A short list of motions:
    w - until the start of the next word, EXCLUDING its first character.
    e - to the end of the current word, INCLUDING the last character.
    $ - to the end of the line, INCLUDING the last character.
    ```
    vitovan
        10
    vitovan  
       2019-05-18 10:11:25 +08:00 via Android
    然后,我想我理解了,谢谢楼主。
    jdhao
        11
    jdhao  
    OP
       2019-05-18 10:20:59 +08:00 via Android
    @vitovan 有 vim 的话上手用一下,结合文档,就比较容易明白这个概念
    mrvon
        12
    mrvon  
       2019-05-18 11:07:50 +08:00
    仔细一想, dw, de 两个命令中,w, e 两个 motion 与 d 结合之后,行为不一致了。为了适应使用者的直觉,所以搞了 exclusive 和 inclusive。感谢分享。
    mrcode
        13
    mrcode  
       2019-05-18 15:13:52 +08:00
    一般习惯用 df* 和 dt*
    jciba5n4y6u
        14
    jciba5n4y6u  
       2019-05-18 21:31:43 +08:00
    dw 经常用,de 没用过。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2859 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:54 · PVG 16:54 · LAX 00:54 · JFK 03:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.