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

是否有一个简单的方法(即不写一个脚本或精心devise的键盘映射序列)来将YANK的一行与YANK的执行位置相对,而不是在块的开始位置?

根据VIM的帮助:“请注意,在一个按字符排列的命令之后,Vim会将光标留在最接近缓冲区起始处的第一个被抽出的字符上。 线路似乎行为相似。

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

我已经search了这么多次和networking。 有很多现有的“VIM快捷方式”的材料,但我还没有find解决scheme。

提前致谢。

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

  '] `] To the last character of the previously changed or yanked text. {not in Vi} 

如果你使用的是可视化块( v ),那么在块之后你可以使用gv重新select同一个块(这也会将你的光标位置移回到之前的位置)。 如果您按下Esc键,则不移动光标就不select该块。

另外感兴趣的可能是在可视块模式下的ctrl-o命令,它在所选块的开始和结束之间跳转。

:y3会从当前的当前行中抽出三行,如果你确切地知道有多less行可以被抽出,这个命令非常方便。 :help :yank细节。

:%y将select整个缓冲区而不用移动光标,如ggvG$y ,而不用select高亮度的闪光并修改"*寄存器。

我使用这个插入模式映射:

 function! SelectAll() %y* endfun imap <expr> <F3> SelectAll() 

ps:如果你喜欢<CV>粘贴(在vim之外),使用%y+

检查https://stackoverflow.com/a/1620030/2247746

如果以可视模式拖放,也可以使用'>`>转到刚刚抽出的视觉select的最后一行/字符。 在这种情况下,这与']`]基本相同,例如在VsVim中显然不被支持。

我不确定自从vmap ygv<Esc>解决scheme发布之后,YankRing是否已经发生了变化,但是在将它添加到我的.vimrc之后并没有保留。 YankRing实际上覆盖了它。

这是我在.vimrc的解决scheme。

 function! YRRunAfterMaps() vmap y ygv<Esc> endfunction