【问题标题】:How do you select a whole column in visual block mode?如何在可视块模式下选择一整列?
【发布时间】:2011-04-13 19:04:26
【问题描述】:

假设我在 (g)Vim 中有这个简单的文本:

a  b  c
a  b  c
a  b  c
a  b  c
a  b  c

更改为可视块选择模式后,如何选择整个第 3 列? Ctrl+V G 选择整个文本。我正在寻找用于选择整个列选择的键盘快捷键(如果存在)。

谢谢。

【问题讨论】:

    标签: vim


    【解决方案1】:

    我敢肯定,我不是唯一一个来这里寻找解决更普遍问题的方法的人。说我有:

    Some text.
    
    one two three
    one two three
    one two three
    one two three
    one two three
    one two three
    
    Some more text.
    

    以下宏将选择例如。当光标在其中的任何位置时,所有“二”列:

    <C-v>iWmw{joO`woOmwoO}koO`w
    

    工作原理

    • &lt;C-v&gt;iW Word 中的可视块选择(iwa" 等当然可以有不同的宏)
    • mw在右边界设置标记
    • {j转到段落开头

    假设您从中间某处开始,此时您的选择将如下所示,其中大写代表选定的字符,$ 代表光标:

    Some text.
    
    $NE Two three
    ONE Two three
    ONE Two three
    one two three
    one two three
    one two three
    
    Some more text.
    

    oO 将光标交换到同一侧(左侧)但另一端(底部)的角落:

    Some text.
    
    ONE Two three
    ONE Two three
    $NE Two three
    one two three
    one two three
    one two three
    
    Some more text.
    

    `w 现在会让你回到正确的边界:

    Some text.
    
    one TWO three
    one TWO three
    one TW$ three
    one two three
    one two three
    one two three
    
    Some more text.
    

    oOmwoO}koO`w 重复该过程以向下到段落底部。

    结果:

    Some text.
    
    one TWO three
    one TWO three
    one TWO three
    one TWO three
    one TWO three
    one $WO three
    
    Some more text.
    

    【讨论】:

      【解决方案2】:

      如果你在第一行的开头,你可以这样做:

      ww ............... jump to the third column
      Ctrl-v } ......... jump to the end of paragraph
      

      如果你在输入之后有一个空行,那么:

      gE ............... goes back to the end of third column
      

      【讨论】:

        【解决方案3】:

        选择列的简单方法可以使用插件vis.vim

        进入视觉模式,选择列ctrl+v,然后你可以用它做任何你想做的事情

        使用 VvCtrl+V 来直观地标记某个区域。然后键入:B cmd(此命令将显示为: :'&lt;,'&gt;B cmd)

        然后该命令将仅应用于视觉选择的区域。

        例如:

        使用ctrl-v 选择一列,然后仅对该列进行替换。

        Ctrl-V ..move.. :B s/pattern/becomes/

        使用 Ctrl-V 选择一列,然后将外部过滤器应用于该列:

        Ctrl-V ..move.. :B !sort

        【讨论】:

          【解决方案4】:

          CTRL-V 进入块选择模式(允许您选择矩形文本块)。在 gvim 中,这与 Windows 的粘贴快捷方式冲突,因此您可以使用 CTRL-Q 代替。

          不幸的是,CTRL-Q [G] 没有做你想做的事情,因为 [G] 运动在文件中线性移动,所以你仍然需要依靠 a 使用计数[j] 议案。您可以避免通过使用非常大的计数(例如 9999)来避免确切知道文件的大小。所以完整的命令是 CTRL-Q [9999j]。

          唉,我不知道有什么方法可以避免丑陋的计数。

          编辑:哦,我读你的问题太快了,错过了你已经提到你对视觉块模式的新认识。我想这是一个相当无用的答案,那么,对不起!

          【讨论】:

            【解决方案5】:

            G 转到最后一行,但如果设置了startoflinecompatible(启用startofline)选项,则将光标移动到第一个非空白位置。如果要保持同一列,请在进入可视块模式之前设置nosol,然后点击G

            来自startofline的手动输入:

            当“on”时,下面列出的命令会将光标移动到该行的第一个非空白处。关闭时,光标保持在同一列中(如果可能)。这适用于命令:CTRL-D、CTRL-U、CTRL-B、CTRL-F、“G”、“H”、“M”、“L”、gg,以及命令“d”、“>" 带有逐行运算符,"%" 带有计数和缓冲区更改命令(CTRL-^、:bnext、:bNext 等)。

            【讨论】:

            • 很好,“set nosol”直接进入了我的 .vimrc。我实际上也很喜欢删除的答案,对于未知长度的文件 9999j 或一个大数字可以解决相同的列选择。
            • 如果你的 .vimrc 也设置了 compatible,请确保 set nosol 出现在该行之后。
            • 这已经困扰我很久了,谢谢!正如 Gökhan Sever 所说,直接在 .vimrc 中:)
            • 如果表格不占用整个文件(例如对齐的降价表格),任何可以与 } 一起使用的东西?
            • 我喜欢这个视频,它展示了列选择,youtube.com/watch?v=KuLy5LzHEzU
            猜你喜欢
            • 2013-09-18
            • 2011-11-16
            • 2012-09-06
            • 1970-01-01
            • 1970-01-01
            • 2011-12-06
            • 1970-01-01
            • 1970-01-01
            • 2014-04-20
            相关资源
            最近更新 更多