代码之家  ›  专栏  ›  技术社区  ›  LVB

在VIM中猛拉一个区域,而光标不移动到块的顶部?

vim
  •  46
  • LVB  · 技术社区  · 14 年前

    有没有一种简单的方法(即不写脚本或复杂的键映射序列)来猛拉一组行并将光标留在执行猛拉的位置,而不是在块的开头?

    根据Vim的帮助:“注意,在一个character wise扬克命令之后,Vim将光标留在第一个扬克字符上,该字符最接近缓冲区的开头。”line wise的行为似乎类似。

    这对我来说有点烦人,因为我倾向于从上到下选择一个大的区域,猛拉,然后粘贴在所选区域的底部附近或下方。今天我要在洋基之前打一个标记(M-X),然后再跳回来,但我怀疑可能会有一个不同的洋基序列来做我需要的。

    我已经搜索过这么多次了。有这么多现有的“vim快捷方式”材料需要涉猎,但我还没有找到解决这个问题的方法。

    事先谢谢。

    6 回复  |  直到 6 年前
        1
  •  56
  •   zigdon    14 年前

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

     ']  `]         To the last character of the previously changed or
                    yanked text.  {not in Vi} 
    
        2
  •  30
  •   Greg Hewgill    14 年前

    如果你用的是视觉块( v ,然后在拉住木块后,可以使用 gv 要重新选择同一个块(也会将光标位置移回其在拖动前的位置)。如果按Esc键,则不移动光标而取消选择块。

    也可能感兴趣的是 ctrl-o 命令处于可视块模式,在选定块的开始和结束之间跳转。

        3
  •  2
  •   ilves    8 年前

    如果在视觉模式下猛拉,也可以使用 '> `> 转到刚才被拖动的视觉选择的最后一行/字符。在这种情况下,这基本上与 '] `] 显然不支持,例如在vsvim中。

        4
  •  1
  •   Community CDub    7 年前

    :y3 将从当前行中拉出三整行,如果你确切知道要拉多少行,这个命令非常方便。 :help :yank 有关详细信息。

    :%y 将选择整个缓冲区而不移动光标, 喜欢 ggvG$y ,不闪烁选择突出显示和修改 "* 注册。

    我使用此插入模式映射:

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

    附言:如果你愿意的话 <C-V> 要粘贴(VIM外部),请使用 %y+

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

        5
  •  0
  •   Matt Ryan    10 年前

    我不确定洋基队自从 vmap ygv<Esc> 解决方案已发布,但在添加到我的 .vimrc . 扬克环实际上覆盖了它。

    这是我的解决方案 VIMRC .

    function! YRRunAfterMaps()
      vmap y ygv<Esc>
    endfunction
    
        6
  •  0
  •   Wischm0pp    6 年前

    我不知道这段时间发生了什么,但在Ideavim,我接受的答案并不像我希望的那样有效。(不要在扬克上移动光标)

    对我来说,技巧就是在洋基之前打个记号,然后再打。

    vmap y mxy`x