vim 如何设置在 f 找到对应的字符的时候进入 insert mode - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
woshichuanqilz
V2EX    Vim

vim 如何设置在 f 找到对应的字符的时候进入 insert mode

  •  
  •   woshichuanqilz 2021-01-22 12:17:08 +08:00 3506 次点击
    这是一个创建于 1725 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家应该都知道 f 的功能就是在当前行找到一个对应的字符, 我想在找到对应的字符的时候直接进入 insertmode 就好象找到之后自动按下 i 键 这个应该怎么设置?

    22 条回复    2021-02-06 11:46:27 +08:00
    jdhao
        1
    jdhao  
       2021-01-22 12:23:48 +08:00 via Android
    f 只能跳到每行一个匹配的字符,要跳到下一个匹配的字符需要继续按 ;,谁知道你想在哪个字符进入 insert 模式。

    结论,你的需求自己都没想清楚
    matrix67
        2
    matrix67  
       2021-01-22 12:25:17 +08:00
    map f fi
    woshichuanqilz
        3
    woshichuanqilz  
    OP
       2021-01-22 12:32:29 +08:00
    @matrix67 这是找到地一个 i 字母没有进入 insert mode
    @jdhao 就比如是定位当前坐标向右第一个, 定义第二个可以用 2fx 来做

    我的意思是能不能对 f 这个功能做一个简单的扩展
    matrix67
        4
    matrix67  
       2021-01-22 12:34:20 +08:00
    @woshichuanqilz #3 哈哈 还真是。想简单了。
    morefreeze
        5
    morefreeze  
       2021-01-22 12:53:44 +08:00
    在插入模式下 c-o 后临时切到 normal 模式,然后 f 找到后还在插入模式,你要做的就是简化 c-o f 吧
    zzzmj
        6
    zzzmj  
       2021-01-22 12:58:57 +08:00
    操作下来,能节省按键次数吗
    jdhao
        7
    jdhao  
       2021-01-22 14:04:55 +08:00 via Android
    @woshichuanqilz 当然可以,重新映射 f 即可,需要你写一个方法,方法里面实现你想要的操作,按下 f,执行这个方法即可
    jdhao
        8
    jdhao  
       2021-01-22 14:10:16 +08:00
    @jdhao nnoremap <expr> f :<C-U>YourFunction()<CR>

    把 YourFunction() 按照你的设想实现即可,不过你既然问这个问题,估计你也实现不了。。所以还是老实用 vim 原有的功能,等你的 vim function 功力达到了再做这样的高级定制。
    teawithlife
        9
    teawithlife  
       2021-01-22 14:44:53 +08:00
    来个 quick and dirty 的办法
    nnoremap fa fai
    nnoremap fb fbi
    ...
    nnoremap fz fzi
    nnoremap fA fAi
    ...
    nnoremap fZ fZi
    jdhao
        10
    jdhao  
       2021-01-22 14:58:19 +08:00 via Android
    @teawithlife 这样根本没用,以 fa 为例,只能跳到每行第一个 a,然后进入 insert 模式。问题是每次都想找第一个出现 a 的地方吗,一行有多个 a 的时候,怎么跳转并且进入插入模式?
    omph
        11
    omph  
       2021-01-22 17:15:36 +08:00
    找到合适的插件
    darksword21
        12
    darksword21  
    PRO
       2021-01-22 17:51:10 +08:00
    emacs 我知道,vim 是不是有个交 anzu 的好像类似的?
    darksword21
        13
    darksword21  
    PRO
       2021-01-22 17:51:18 +08:00
    sona
        14
    sona  
       2021-01-22 19:37:15 +08:00


    找字母(这个行为当只发生一步的时候必然只会找到第一个顺序或逆序的结果)--- 插入
    这个操作只有两步,可以用两个字母代替

    找字母 --- 定位其中某一个 --- 插入
    这个操作总共三步,起码需要三步,无论如何你也不可能通过两个字母达到这个效果
    三个字母可以做出来这个功能,通过用字母标记对应字母位置的方式
    这种方式应该是有插件的,你可以找找
    但是这里虽然表面只需要三个字母,但你却需要一个额外的观察记忆标记字母并且使用,我个人觉得其实很繁琐

    找字母 --- 插入 --- 在插入模式下移动到下一个字母处
    这样可以通过两个按键达到找到第一个字母并进入的效果,同时通过快捷键移动到剩下的位置
    你可以很简单的通过 @teawithlife 的那个方法加上一个 imap 实现

    但我不明白你为什么需要这个功能,因为 vim 找到字母在 normal 模式下明显是更方便的
    你可以选择的操作更多,你可以操作当前的字母,当前的词汇,当前的文本对象,可以直接替换当前字母而不退出 normal 模式
    这样不是更好吗
    sona
        15
    sona  
       2021-01-22 19:48:06 +08:00   1
    额,回复完发现我错了,因为你需要的是自动插入,所以插入只是操作的结束,并不算一个步骤
    找 字母 本身就是两步,本身就需要两个字母
    找 字母 定位某一个 三步,必然需要三个字母或以上
    找 字母 在插入模式下移动到下个结果, 这样可以得到一种第一个位置只需要两个字母,剩下的位置需要更多按键的方式
    最后结论依然不变,找到字母保持 normal 我认为依然是对的
    no1xsyzy
        16
    no1xsyzy  
       2021-01-23 00:15:39 +08:00
    @jdhao nnoremap fa fai 了以后 2fa 就是 2fai
    gppola666
        17
    gppola666  
       2021-01-23 00:23:24 +08:00
    就多按一个 i 键,没必要,而且不一定是 i,还可能是 r,ciw,d$等等方式
    DrakeXiang
        18
    DrakeXiang  
       2021-01-23 00:46:29 +08:00   1
    这种很可能造成效率低下,要数有多少个目标字符,数错了成本就很大,数对了也只是少按一次键而已,而且你能保证你的目标字符都在你光标的同一侧吗?这恐怕很不好满足,有时候你的目标字符前后有特殊字符,一个 f 就能找到,然后通过 i 或者 a 来达到目的,但如果你把 f 改了,你就很可能无法使用 f 找到特殊字符,只能自己数,为了节省一个按键来牺牲灵活性,实在是得不偿失
    Takamine
        19
    Takamine  
       2021-01-23 07:45:26 +08:00 via Android
    一般来说我用 w 的频率更高,f 后可能还要;几次才能找到自己要的,而且找到特征字符之后也不一定都是 i,还会 a,diw 都有可能。
    bickman
        20
    bickman  
       2021-01-23 08:26:03 +08:00
    fi 就行了,或者自己定义宏
    bickman
        21
    bickman  
       2021-01-23 08:30:24 +08:00
    f 是向后查找,i 是插入字符,你想找到后插入字符就用 fi,或者自己定义宏,f 99%的情况下都不是一次就能查找到的,肯定要多 f 几次,如果直接进入 f 一下就进入插入模式,还这么查找,这样反而反人类,不知道楼主提这个问题是不是没有怎么搞明白 vim 基本思想,或者仔细思考过。
    woshichuanqilz
        22
    woshichuanqilz  
    OP
       2021-02-06 11:46:27 +08:00
    @bickman 请教一下我的目的是少按一个键, 是哪里违背了 vim 的基本思想, 按你的说法你的 vimrc 里面的 key remap 好像都违背 vim 的基本思想了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1474 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 16:42 PVG 00:42 LAX 09:42 JFK 12:42
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86