在没有光标移动到块顶部的情况下在VIM中划出一个区域?

LVB*_*LVB 50 vim

是否有一种简单的方法(即没有编写脚本或精心设计的键映射序列)来抽取一组线并将光标留在执行Yank的任何地方,而不是在块的开头?

根据VIM的帮助:"请注意,在一个字符式的yank命令之后,Vim将光标留在最接近缓冲区起点的第一个被拉出的字符上." 线条似乎表现相似.

这对我来说有点烦人,因为我倾向于从上到下选择一个大区域,Yank,然后粘贴到所选区域底部附近或下方.今天我在Yank之前设置了一个标记(mx),然后跳回来,但我怀疑可能有一个不同的Yank序列可以满足我的需要.

我已经多次搜索SO和网络了.有很多现有的"VIM快捷方式"材料需要解决,但我还没有找到解决方案.

提前致谢.

zig*_*don 66

不完全回答你的问题,但也许']会解决你的问题?

 ']  `]         To the last character of the previously changed or
                yanked text.  {not in Vi} 
Run Code Online (Sandbox Code Playgroud)

  • @LVB,@ Cock,不,这个映射确实不太好用:如果我从下到上猛拉,那么我的光标将被移回到底部.尝试@Greg Hewgill隐式建议的映射:`:vmap y ygv <Esc>`.这个,真的,像一个魅力. (16认同)
  • 这导致:'vmap yy \`]` (6认同)

Gre*_*ill 34

如果您正在使用可视块(v),那么在对块进行操作后,您可以使用gv重新选择相同的块(这也会将光标位置移回到yanking之前的位置).如果然后按Esc,则在不移动光标的情况下取消选择该块.

同样令人感兴趣的是ctrl-o可视块模式下的命令,它在所选块的开始和结束之间跳转.

  • 噢,@ Greh Hewgill,谢谢你,非常感谢你!我试图找到解决方案这么久,很多次我看到像zigdon提供的建议:用'']`技巧,但它不能正常工作:如果我从下到上猛拉,那么我的光标将被移动回到底部.但现在,在阅读完帖后,我定义了映射`:vmap y ygv <Esc>`,它就像一个魅力.再次非常感谢. (4认同)

小智 10

如果在视觉模式下拉动,您还可以使用'>`>转到刚刚拉动的视觉选择的最后一行/字符。']在这种情况下,这本质上与`]VsVim 中显然不支持的相同。