代码之家  ›  专栏  ›  技术社区  ›  Peter

使在vim中插入单个字符成为原子操作

vim
  •  19
  • Peter  · 技术社区  · 15 年前

    我早就在Vim中使用了这个非常有用的快捷方式:

    nmap <space> i <esc>r
    

    这意味着如果我按下 空间 f 例如,它将插入一个字符 f 在给定位置。

    但不幸的是,这不是原子的。 空间 F 然后导航到其他地方,然后按 . ,我得到相当于 R f 不是 空间 f .

    所有这些都是有道理的,但问题是:有没有一种制造这种原子的方法,所以 . 是否将重复“插入字符”操作,以便“撤消”等都将其视为一个操作?

    5 回复  |  直到 15 年前
        1
  •  11
  •   too much php    15 年前

    令人惊叹的!迈克尔的回答告诉我,我需要一个插件来完成我的插件,它现在可以做你想做的事情了-我一直在努力想办法做这件事好多年了!

    1) 安装 Tim Pope's plugin

    2) 安装 my plugin

    3) 将映射添加到 .vimrc :

    nnoremap <space> :<C-U>call InsertChar#insert(v:count1)<CR>
    
        2
  •  7
  •   Maxim Kim    15 年前

    这对你有用吗?

    noremap <silent> <space> :exe "normal i".nr2char(getchar())<CR>
    
        3
  •  3
  •   michael    15 年前

    您可能想看看这个插件脚本。可能可以配置您的地图以支持它。阅读支持文档

    http://www.vim.org/scripts/script.php?script_id=2136

        4
  •  2
  •   paxdiablo    15 年前

    抱歉,我不能为您的问题提供具体的答案,但我会注意到,我倾向于使用 . 当我必须复制大量命令(例如,我想插入 f 5次或更多)。

    如果是这样的话,我认为用宏保存是不值得的。使用宏而不是 f ESC 那次行动 原子的,这样你就可以 . 让你心满意足。

    如果我知道我想经常重复的话,我会使用非宏版本。

    另外,你知道我开始喜欢<kbd>标签了:—)

        5
  •  -1
  •   Brad Larson    11 年前