我发现Vim的撤消有点过于粗糙.例如,如果我键入这样的东西:
a // to go into edit mode
to be or not to ve
<esc> // to exit insert mode
Run Code Online (Sandbox Code Playgroud)
哎呀!我弄错了.我想开始撤消所以我按u,但然后它清除整行.有没有办法逐字逐句或逐字逐句撤消?
Fat*_*lan 22
你可以通过破坏撤消:help i_ctrl-g_u.如果你想要每个角色,你可以映射这个,但这可能有点复杂.将此映射到空格按钮是一种方法.
:inoremap <Space> <Space><C-g>u
Run Code Online (Sandbox Code Playgroud)
之后,每个单词都可以撤消 u
sou*_*rge 10
不,这是不可能的,实际上也没有必要.Vim有百万种处理方式.试试这个cb例子.或者bC.或者brb.或者Tspace跳回去而不是b.或者ciw.
当然,您可以在插入模式下使用大多数这些解决方案(CTRLo首先按下),或者将一个解决方案绑定到您喜欢的组合键(:help map和:help imap).
因此,当您从其他人那里看到您要求的内容在Vi(AFAIK)中不存在.
撤消撤消上次操作的内容.如果您的上一个操作是进入插入模式然后添加一行,然后退出插入模式.这将被取消,但是如果从默认模式中您点击"x"键,那么您将删除1个字符,或者如果在视觉模式中选择了文本,则文本将被删除.如果您点击撤消,那么您将恢复该一个字符或所选文本.
......您应该将此视为一种行动,并且可以原子地撤消或恢复行动
如前所述,如果您想删除前一个单词,那么您应该能够按住Ctrl + w并在保持插入模式时删除前一个单词.
如果退出插入模式,你可以导航(运动)一个单词,用"b"将带有"w"的单词转发到带有"e"的单词的结尾,并且可以用"c"剪切(这使你处于插入模式) "或删除"d".切换和删除操作都可以接受跟随它们的动作,因此您可以使用"dw"删除当前单词/直到下一个单词,或者使用"cb"删除前一个单词
当你记得使用"."时,这个概念会变得更有用.命令(在正常模式下).此命令用于重复上一个操作.我已经多次使用这个来查找并替换文件中的一小组单词(如果你对变化太多而偏执,这尤其有用).方案如下:
文件:
这是我的帖子
真的是一个考验
这是中间的
这就是结局
如果我想将"is"替换为"was",我可以写:%s /\<is \>/was/g
但是,如果我想改变第一行,第三行"是"到"是"(我不知道他们的行号,我想看看是否还有其他地方我想改变的是我可以输入"/是"
点击"n"直到我到达我想要替换的地方,然后点击"cw"并输入"was"我现在可以点击"n"直到我到达另一个我想要替换的地方然后点击".",这将取代"是"with"是"(注意:我的搜索字符串不限于单词"is",只是两个字符"is"所以"This"和"this"将在这种情况下匹配)