Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使在Vim中插入单个字符成为原子操作_Vim - Fatal编程技术网

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

使在Vim中插入单个字符成为原子操作,vim,Vim,我一直在vim中使用这个非常有用的快捷方式: nmap <space> i <esc>r nmap i r 这意味着,例如,如果我按空格f,它将在给定位置插入单个字符f 然而,不幸的是,这不是原子的,也就是说,如果我按下spacef,然后导航到其他地方,然后按下,我得到的是rf的等价物,而不是spacef 所有这些都是有道理的,但问题是:有没有一种方法可以使这个原子化,所以。将重复“插入字符”操作,以便撤消等也将其视为一个操作?很抱歉,我无法为您的问题提供具体答案,但

我一直在vim中使用这个非常有用的快捷方式:

nmap <space> i <esc>r
nmap i r
这意味着,例如,如果我按空格f,它将在给定位置插入单个字符
f

然而,不幸的是,这不是原子的,也就是说,如果我按下spacef,然后导航到其他地方,然后按下,我得到的是rf的等价物,而不是spacef


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

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

如果这里是这样的话,我认为使用宏的节省是不值得的。您可以通过使用宏而不是ifesc保存一次击键,并且该操作是原子操作,因此您可以这样做。让你心满意足

如果我知道我想重复很多次,我会使用非宏版本


另外,你知道我开始有点喜欢这个标签了:-)

你可能想看看这个插件脚本。可以对地图进行配置以使其受支持。阅读支持文档


太棒了!Michael的回答告诉我,我需要一个插件来完成我的插件,它现在可以做你想做的事情了——我一直在想怎么做

1)安装

2)安装

3)
添加映射。vimrc

nnoremap <space> :<C-U>call InsertChar#insert(v:count1)<CR>
nnoremap:callinsertchar#insert(v:count1)

这对你有用吗

noremap <silent> <space> :exe "normal i".nr2char(getchar())<CR>
noremap:exe“normal i”.nr2char(getchar())
nmap xPpr
正如这些人所建议的:


当然,这是我目前的行为——但使用此快捷方式非常方便,我希望能够一直使用它。这不是关于保存密钥,而是关于一致性:)+1用于随机postscript(我假设这不是在嘲笑我:))不,我实际上从未使用过它,我倾向于使用块引用标记,但kbd对于密钥更好。它很好,而且肯定是一个可能的解决方案。这种方法的一个缺点是,按空格键时光标消失,因此无法跟踪插入字符的位置@太多php的方法要复杂得多,但它的优点是让光标保持在原位。如果您进行快速插入,光标的缺失并不是很明显。这太棒了!我使用了未绑定的
K
,使用相同的
I
手指,Kim以K开头。我相信这就是原始开发人员映射键的方式。这比我预期的要复杂得多,但确实会使光标变红(这是一个很棒的触摸),允许使用escape进行取消,也许这就是我从现在开始使用的……我今天才发现这一点,但我仍然想说——这将改变我的生活!非常感谢。非常感谢。看起来@too-more-php的方法非常好,它就是基于这个。
nmap <Space> xPpr