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

除了使用方向键 vim insert mode 下如何快速前进一个字符?

  •  
  •   FaiChou · 131 天前 · 1496 次点击
    这是一个创建于 131 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位 vimer ,你们在 insert mode 输入时候是怎么快速前进一个字符的?

    如果退出 insert mode ,按 A 可以做到,但感觉好麻烦。

    如果是在别的地方,使用 Emacs 的快捷键 ctrl+e 可以到末尾,或者 ctrl+f 前进一个字符都是很方便的。

    第 1 条附言  ·  131 天前

    还是映射成 Emacs 下的几个快捷键比较方便:

    local map = vim.keymap.set
    map("i", "<C-f>", "<right>", { desc = "go forward" })
    map("i", "<C-b>", "<left>", { desc = "go backward" })
    map("i", "<C-n>", "<down>", { desc = "go down a line" })
    map("i", "<C-p>", "<up>", { desc = "go up a line" })
    
    23 条回复    2023-11-03 09:26:29 +08:00
    jinzc
        1
    jinzc  
       131 天前
    你使用 1 个月后,形成手指肌肉记忆,就不会有这个疑问了。
    iSecret
        2
    iSecret  
       131 天前   ❤️ 1
    退出 insert mode 然后按 w 前进一个单词,按 b 后退一个单词,按 0 到行首,按 $ 到行尾,然后再按 i 或者 a 进入 insert mode 呗。
    Masoud2023
        3
    Masoud2023  
       131 天前
    imap 绑定一个你觉得舒服的按键
    FaiChou
        4
    FaiChou  
    OP
       131 天前
    @iSecret 这些我都知道,但感觉退出 insert mode 感觉还是慢了一点,虽然很多人喜欢用 jj 或者 jk 退出 insert mode 。
    alfa
        5
    alfa  
       131 天前
    如果是 jb 家的,我的设置
    imap <C-p> <Up>
    imap <C-n> <Down>
    imap <C-b> <Left>
    imap <C-f> <Right>
    imap <C-e> <End>
    imap <C-a> <Esc>^i
    imap <C-;> <End>;
    marcong95
        6
    marcong95  
       131 天前
    直接硬件外挂,自定义键位 CapsLock ( Anne Pro 的 Magic Fn )+WASD (逃)
    Rooger
        7
    Rooger  
       131 天前   ❤️ 1
    Ctrl+F/B ,如果你这两个快捷键没有使用的情况下

    在 Vim 中添加以下配置
    inoremap <C-F> <left>
    inoremap <C-B> <right>


    Mac 下主流编辑器几乎都是支持 Ctrl+F/B 前进和后退的,Ctrl+P 前一行,Ctrl+N 后一行。

    VS Code 以及 Zed Vim 插件下,插入模式可以直接使用 Ctrl+F/B

    在 Windows 上 xShell 在输入命令上支持 Ctrl+F/B 前进和后退
    chippai
        8
    chippai  
       131 天前
    我也是 jb idea vim 党
    文本是用的 ctrl + hljk ;然后再改 ctrl + pn ,作为弹窗的上下切换;方便不少
    knightdf
        9
    knightdf  
       131 天前
    c-o+l
    FaiChou
        10
    FaiChou  
    OP
       131 天前
    @knightdf 一次性普通模式应该也方便,可能自己不太适应。谢谢举例。
    donatello
        11
    donatello  
       131 天前
    caps 映射 单独按 esc,和其他按键一起按是 ctrl
    marding
        12
    marding  
       131 天前
    @FaiChou 我有个方法是把 Capslock 键映射成 Esc 键, 这样子退出 insert mode 就很方便了. 这样子先退出 insert mode 然后按 a, 还算方便吧自己用着
    xloong
        13
    xloong  
       131 天前
    @donatello #11 请问下是怎么区分的 或者说是用什么工具实现的
    churchill
        14
    churchill  
       131 天前
    tabout flash 满足我几乎所有的移动需求
    z1645444
        15
    z1645444  
       131 天前
    我一直是回到 Normal mode 再 a ,Vim 有默认的回到 Normal mode 的组合键,我一直使用的是 <C-c>,另一个是 <C-[>,右手小拇指肌无力所以就早期开始用 Vim 的时候就没准备习惯使用后者
    ixx
        16
    ixx  
       131 天前
    你需要一个可以自己改键的键盘然后就可以用自定义的 fn+h 向前一个字符了
    yuancoder
        17
    yuancoder  
       131 天前
    自己映射一下<c-f>
    gca
        18
    gca  
       131 天前
    ctrl + O, A
    ricebna
        19
    ricebna  
       131 天前
    我用 Mac, 安装 Karabiner 后, 设定空格模式. 即按住空格后, 自定义各种键组合.

    例如:
    空格 + sdfe = 方向键;
    空格 + jkli = shift + 方向键;
    在编程这件事上, 方向键与 shift+方向键的使用频率, 一个几乎是 100%, 一个是 99%. 很有必要作为最基础最好用的快捷键.

    另外的常用键组合如下:
    空格 + w = page up
    空格 + r = page down
    空格 + a = 移到行首 (Mac 上各种软件, 打字编辑都有效)
    空格 + g = 移到行尾
    空格 + u = Add Selection for Next Occurrence (编程高频)
    空格 + u = Add Selection for Next Occurrence (编程高频)
    空格 + b = preview tab (Mac 上各种软件都遵循这个规范, 如浏览器左边标签页, vscode 左边标签页)
    空格 + n = next tab

    其他根据个人需要自行映射, 如我把切换最常用软件分别映射为:
    空格 + t = Chrome
    空格 + y = Idea
    空格 + o = 微信
    空格 + q = 飞书
    空格 + v = iTerm2

    我觉得 shift + 顶部数字键组合为符号键还是有点麻烦, 所以直接把顶部从最左边的 "`" 到 "+" 再到 "?" 全部映射为空格模式了.
    为什么这样做? 因为如果我们在输入时手掌始终不离开当前键区的话, 效率最高的, 也少很多输入打断.
    如果使用 shift 甚至是 command, 都得离开输入键区, 空格 + 各种键组合可以始终保持手掌键区不变.
    相比之下, 我认为 vim 的模式转换就弱爆了, 我按住空格就是操作模式, 取消空格就是输入模式, 哪有那么麻烦.
    如果真的要输入空格呢? 按一下空格就是真的空格, 担心误触, 不会, 本人已经实践 4 年, 这套模式已验证十分可靠.

    Karabiner 非常强大, 我不知道 Windows 下有没有类似强大工具.
    Karabiner 不仅能做键映射, 还能直接执行命令行, 能判断当前所处软件启用不同策略, 能检测当前硬件是键盘还是笔记本键盘, 还有鼠标相关控制.
    aliezleft
        20
    aliezleft  
       131 天前   ❤️ 1
    bjzhush
        21
    bjzhush  
       130 天前
    翻了下我十年前的配置
    " move cursor in insert mode
    inoremap <C-J> <C-O>j
    inoremap <C-K> <C-O>k
    inoremap <C-H> <C-O>h
    inoremap <C-L> <C-O>l
    不止前后字符,hjkl 在 insert mode 都可以按住 ctrl 键使用
    不过我印象中我很少在 insert 模式移动光标,移动的话,习惯了先 esc 返回 normal mode ,各模式干各自的事
    donatello
        22
    donatello  
       129 天前   ❤️ 1
    @xloong windows 有个开源软件 dual key remap mac karabiner
    iceAD
        23
    iceAD  
       111 天前
    我是用的 keychron 的键盘,因为支持 via ,直接在 fn1 区的 hjkl 改成了对应的方向键,无缝衔接 vim 的移动,在插入模式下按 fn1+对应方向就行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5665 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 07:27 · PVG 15:27 · LAX 23:27 · JFK 02:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.