vim – 的行为;重复最后一个t命令困扰我。你能帮我做得更好吗
好的,假设我们有一行文本:
粘性岩石 其中括号显示光标的位置,处于正常模式。按tr后,你会得到: stackov [e] rflow岩石 现在有趣的部分。如果你推,会发生什么?重复命令?没有! Vim找到下一个“r”(立即在光标右侧),并将其自身位于该位置(已经存在的位置)。 我宁愿将光标移动到此位置: stackoverflow []岩石 这可以通过使用l在按压之前向右移动一个字符来实现;但额外的步骤是刺激性的。 T有一个类似的问题,但不是f和F.有没有办法呢?用t和T表现我想要的方式?
也许这不是你正在寻找的答案,但我无法抗拒为此写一个VIM脚本。我把它放在我的.vimrc中,它适用于我:
map ; :call Semicolon()<CR> function Semicolon() let s:pos1 = getpos(".") normal! ; let s:pos2 = getpos(".") if s:pos1 == s:pos2 normal! 2; endif endfunction 基本思想是不会移动到下一场比赛,而是2;将(如果有匹配)。脚本支持;之后任何tTfF。实现该命令的最简单方法是为此编写一个类似的功能。 编辑 EDIT2 好的,这些东西总是比我原来想的更难。目前的映射有以下问题: >假设你像上面那样做了一个搜索。现在应该d或c;做?就我而言,他们应该删除或更改,直到第一个不是第二个。这可以通过仅对正常和可视模式进行映射来解决,而不是操作符挂起模式。 所以现在我最终在我的.vimrc(我还为…和…做了一个函数): " Remap ; and,commands so they also work after t and T " Only do the remapping for normal and visual mode,not operator pending " Use @= instead of :call to prevent leaving visual mode nmap ; @=FixCommaAndSemicolon(";")<CR> nmap,@=FixCommaAndSemicolon(",")<CR> vmap ; @=FixCommaAndSemicolon(";")<CR> vmap,")<CR> function FixCommaAndSemicolon(command) let s:pos1 = getpos(".") execute "normal! " . a:command let s:pos2 = getpos(".") if s:pos1 == s:pos2 execute "normal! 2" . a:command endif return "" endfunction (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |