是否有一种简单的方法(即没有编写脚本或精心设计的键映射序列)来抽取一组线并将光标留在执行Yank的任何地方,而不是在块的开头?
根据VIM的帮助:“请注意,在一个字符式的yank命令之后,Vim将光标留在最接近缓冲区起点的第一个被拉出的字符上。”行间似乎表现相似。
这对我来说有点烦人,因为我倾向于从上到下选择一个大区域,Yank,然后粘贴到所选区域底部附近或下方。今天我在Yank之前设置了一个标记(m-x),然后跳回来,但我怀疑可能有一个不同的Yank序列可以满足我的需要。
我已经多次搜索SO和网络了。有很多现有的“VIM快捷方式”材料需要解决,但我还没有找到解决方案。
提前致谢。
答案 0 :(得分:57)
不完全回答你的问题,但也许']
会解决你的问题?
'] `] To the last character of the previously changed or
yanked text. {not in Vi}
答案 1 :(得分:30)
如果您正在使用可视化块(v
),那么在对块进行操作后,您可以使用gv
重新选择相同的块(这也会将光标位置移回原来的位置)在yanking之前)。如果然后按Esc,则在不移动光标的情况下取消选择该块。
同样令人感兴趣的是可视块模式下的ctrl-o
命令,该命令在所选块的开始和结束之间跳转。
答案 2 :(得分:2)
如果在视觉模式下进行游戏,您还可以使用'>
或`>
转到刚刚抽出的视觉选择的最后一行/字符。在此上下文中,这与']
和`]
基本相同,显然不支持,例如在VsVim。
答案 3 :(得分:1)
:y3
将从当前当前行中抽出三行,如果您确切地知道要抽出多少行,则此命令非常方便。 :help :yank
了解详情。
:%y
将选择整个缓冲区而不移动光标,
与ggvG$y
类似,没有选择的突出显示并修改"*
寄存器。
我使用此插入模式映射:
function! SelectAll()
%y*
endfun
imap <expr> <F3> SelectAll()
ps:如果您希望粘贴<C-V>
(在vim之外),请使用%y+
答案 4 :(得分:0)
我不确定自vmap ygv<Esc>
解决方案发布以来YankRing是否发生了变化,但在将其添加到我的.vimrc
之后,这种情况并未持续存在。 YankRing实际上覆盖了它。
这是.vimrc
中的解决方案。
function! YRRunAfterMaps()
vmap y ygv<Esc>
endfunction
答案 5 :(得分:0)
我不知道其间发生了什么,但是在IdeaVim中,接受的答案无法按我希望的那样工作。 (不要将光标移到yank上)
对我来说,窍门是在拉动之前设置一个标记,然后再进行标记。
vmap y mxy`x