【问题标题】:How to "select all" in vim without losing cursor position?如何在vim中“全选”而不丢失光标位置?
【发布时间】:2014-05-03 08:58:31
【问题描述】:

我的 mswin.vim 包含以下 Ctrl-A 命令

inoremap <C-A> <C-O>gg<C-O>gH<C-O>G

此命令会正确选择文件中的所有行,但也会使光标跳到文件末尾(不希望的副作用)。有没有办法在不移动光标的情况下“全选”?

提前感谢您的任何帮助或建议。

【问题讨论】:

    标签: vim


    【解决方案1】:

    恐怕这无法实现。由于在视觉选择模式下,光标将位于视觉范围的开头或结尾。视觉模式下的任何运动都会导致视觉选择范围的变化(取决于视觉模式:char/line/block-wise)。

    重点是,select-allkept the cursor position 之后你想做什么?可能是 X->Y 问题,请告诉我们您的最终目标是什么。可能有更好的解决方案。

    顺便说一句,C-A 对增加数字非常有用,也许您想重新考虑地图触发器?

    【讨论】:

    • 谢谢 - 我正在尝试使用 Ctrl-A + = 快速自动缩进文件。我确信有一种方法可以通过命令来完成,但我将无法记住它(来自 windows 世界)
    • 如果您正确设置文件类型,gg=G 将自动格式化/缩进您的文件。如果你想回到你的光标位置(大约,因为自动缩进可能会改变你的原光标线),你可以在做=之前,设置一个标记,然后在=之后跳回来@user3367166
    • 一个更简单的选项可以转到上一个光标位置:''(即按两次单引号按钮)
    • @Jan – '' 让你回到那行,但在它的开头(就像按下^)而不是你之前的确切位置。使用getpos()setpos()(例如g3cko's answer)这不是问题。
    【解决方案2】:

    最简单最快的方法是使用:: % y + 然后去谷歌文档(或任何地方)并粘贴。

    【讨论】:

    • 谢谢,这个命令将文件的内容复制到剪贴板,但是我想选择内容,而不是复制它。
    【解决方案3】:

    你可以看看getpossetpos——也许你可以把你想要的东西包装成这样:

    function! TestFunc()
        let save_cursor = getpos(".")
        normal ggVG
        " -- do something
        call setpos('.', save_cursor)
    endfunction
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2019-01-25
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      相关资源
      最近更新 更多