Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅对齐VIM中第一个分隔符上的文本_Vim_Alignment - Fatal编程技术网

仅对齐VIM中第一个分隔符上的文本

仅对齐VIM中第一个分隔符上的文本,vim,alignment,Vim,Alignment,假设我有以下代码: width: 215px; height: 22px; margin-top: 3px; background-color: white; border: 1px solid #999999; 我想这样排列它: width: 215px; height: 22px; margin-top: 3px; background-color: white; border: 1px solid #999999;

假设我有以下代码:

width: 215px;
height: 22px;
margin-top: 3px;
background-color: white;
border: 1px solid #999999;
我想这样排列它:

width:            215px;
height:           22px;
margin-top:       3px;
background-color: white;
border:           1px solid #999999;
使用Align.vim我可以使用
:Align\s
将空格用作分隔符,但这有两个问题

  • 初始缩进加倍
  • 所有的空格都被视为分隔符,因此最后一行被弄乱了
  • 我已经阅读了Align.vim提供的许多选项,但我还没有找到一种方法来实现这一点。

    如果您使用,那么您只需执行
    :制表/:\zs/


    看看Align在vim.org上的描述,类似的调用应该也适用于它。您可以试试
    :Align:\zs
    。我不使用Align,所以我不是肯定的。

    你可以用Vim宏来实现,不需要插件。将光标放在第一行的任意位置,并在正常模式下键入,而不是在插入模式下键入:

    qa0f:w100i <Esc>19|dwjq4@a
    
    利用的算法,这可以通过以下代码完成,这对我来说稍微容易一点:)

    • 在第一个冒号后添加足够的SPCA

      :%s/^[^:::]\zs/
      大量空格
      /

    • 但是如果一直按空格键会伤害你的拇指,那么就用这个代替

      :%s/^[^:::\zs/\=重复(“”,100)/

    • 然后删除第19列之后的所有空格

      :%s/\%19v\s*/

      注意:%s将在所有行上执行此操作,如果不需要,请指定一个范围

    • 如果您不想数到19,请使用以下方法:

      %s/:\zs.*/|%s/*/\=len(子匹配(0))/|排序!n | let n=getline(1)| undo | echo“最右边的nmuber列”:“is'n


    您仍然可以使用首选插件
    Align.vim
    使用以下命令:

    Align! lp0P0: \s
    
    Align
    表示第一个参数是您订购的
    AlignCtrl
    格式 要左对齐的第一个匹配(
    l
    )没有空格填充(
    p0P0
    ),您还希望跳过(
    )所有后续匹配。
    此示例可以扩展为更复杂的对齐方式。

    是的,这适用于Align。您可能想使用
    :AlignCtrl l:
    (或类似)来忽略任何其他冒号。有人能解释一下
    \zs
    的含义吗?使用
    \zs
    将匹配
    \zs
    之前的所有内容,但将其放回结果中。也就是说,它将保留您以前所有的
    \zs
    不变(就像您将在其周围放置一组
    (…)
    ,并在替换中首先使用
    \1
    。请参阅
    :h/\zs
    ,有关在没有插件的情况下工作的小型但相对通用的对齐技巧,请参阅问题“”.很好,你接着解释了-没有它,我不敢输入这个神奇的咒语,因为我害怕我的灵魂和磁盘内容,但有了它,我甚至可以学到一些新的有趣的东西(尽管是反常的)vim commands!@TalkLittle非常好地使用了不需要任何附加插件的无插件解决方案。非常好地使用了注释过的vim命令来帮助新用户。所有支持和解释本机vim功能的良好实践。对于不需要任何插件的解决方案,我有一个类似的问题,但不希望在OP的问题中填充。我已尝试将您的答案更改为:Align!1:和:Align!1:\s和:Align 1:等,但未发现如何使用类似于您的回答的内容使Align仅对齐第一个:。我将如何做?
    :norm!@a
    
    Align! lp0P0: \s