在Vim中拖动一个区域而不将光标移动到块的顶部?

mcvgt66p  于 12个月前  发布在  其他
关注(0)|答案(7)|浏览(110)

有没有一种简单的方法(即不写脚本或精心设计的键Map序列)来Yank一组行,并将光标留在Yank执行的任何地方,而不是在块的开始处?
根据Vim的帮助:“注意,在一个字符方向的拉拽命令之后,Vim会将光标停留在第一个拉拽的字符上,该字符最接近缓冲区的开始。”
这对我来说有点烦人,因为我倾向于从上到下选择一个大区域,Yank,然后粘贴到所选区域的底部附近或下方。今天我在Yank之前设置一个标记(m-x),然后跳回来,但我怀疑可能有一个不同的Yank序列可以完成我需要的任务。
我已经在SO和网上搜索了无数次,有太多现有的“Vim快捷方式”材料需要我去研究,但我还没有找到解决这个问题的方法。
先谢了。

qzlgjiam

qzlgjiam1#

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

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

字符串

aoyhnmkz

aoyhnmkz2#

如果您使用的是可视块(v),那么在拖动块后,您可以使用gv重新选择同一块(这也会将光标位置移回拖动前的位置)。如果您随后按ESC键,则该块将被取消选择,而无需移动光标。
同样有趣的是可视块模式中的ctrl-o命令,它在所选块的开始和结束之间跳转。

eulz3vhy

eulz3vhy3#

如果在视觉模式下拉拽,你也可以使用'>>`来转到刚刚拉拽的视觉选择的最后一行/最后一个字符。在这种情况下,这基本上与`']`和]`相同,这显然是不支持的,例如在VsVim中。

gmxoilav

gmxoilav4#

:y3将从当前行中拉出三整行,如果您确切知道要拉出多少行,此命令非常方便。:help :yank详细信息。
:%y将选择整个缓冲区,而不移动光标,像ggvG$y一样,没有 Flink 的选择突出显示和修改"*寄存器。
我使用这个插入模式Map:

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

字符串
ps:如果你更喜欢<C-V>粘贴(Vim外部),使用%y+
检查https://stackoverflow.com/a/1620030/2247746

vybvopom

vybvopom5#

我不确定自从vmap ygv<Esc>解决方案发布后YankRing是否发生了变化,但在将其添加到.vimrc后,我并没有坚持下去。YankRing实际上覆盖了它。
下面是我在.vimrc中的解决方案。

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

字符串

0wi1tuuw

0wi1tuuw6#

我不知道在此期间发生了什么,但在IdeaVim中,接受的答案并不像我希望的那样工作。
对我来说,诀窍就是在猛拉之前做一个标记,然后再去做。

vmap y mxy`x

字符串

vaj7vani

vaj7vani7#

如果你使用的是Lua,你可以定义这个keybinding,这将在猛拉之前猛拉并返回到位置:

vim.api.nvim_set_keymap("x", "y", "ygv<Esc>", { noremap = true, silent = true })

字符串

相关问题