【问题标题】:Align: How to trim spaces from block selection to start of text?对齐:如何修剪从块选择到文本开头的空格?
【发布时间】:2013-03-30 04:53:32
【问题描述】:

我经常发现自己在其他文本中左对齐文本。
我知道有一些插件可以对齐列,但在许多其他文本中这不是最简单的方法。

这是我的文字:

>...this is text               X      more text
>...this is more text          X          more text
>...text text text             X               more text
>...this is text               X       more text
>...this is more text          X     more text

我想要做的是选择一个单列的块(上面示例中的X)并删除我的块和块之后开始的文本之间的所有空格。

最好的方法是什么?

【问题讨论】:

    标签: regex vim alignment spaces


    【解决方案1】:

    不是查找和替换解决方案,而是如何

    • 将光标放在起始位置
    • 99@="dwj"

    细分

    • dw: d(elete) w(ord) (删除所有空格,直到下一个单词的开头)
    • j:然后转到下一行
    • 99@:99次

    【讨论】:

    • 为了更清楚一点,'dw' 在一个空白处,将删除所有空格,直到下一个单词的开头。
    • @XavierT。 - 谢谢,好多了。我已将您的评论添加到答案中。
    【解决方案2】:

    直观地选择要对齐的文本,然后使用这个 ex 命令:'<,'>s/\%Xv\s*// (用您选择的块列号替换 X。)

    • '<,'> 定义替换命令的范围,

    • \%Xv 是用于定位特定列的零宽度正则表达式模式,检查:help pattern

    【讨论】:

    • 是的,一个很好的解决方案!我试图把它放在地图中但没有成功:map <silent> <F5> <ESC>:let r = col(".")<CR>gv:exe "s/\\%".r."v\\s*//"<CR> 首先选择块(X),然后 以捕获列,再次 gv 重新选择块,然后执行您的命令。这里有什么问题? :(
    • 试试这个:noremap <F9> <ESC>:let r = col(".")<CR>:exe "'<,'>s/\\%".r."v\\s*//"<CR> 问题是,在可视模式下,ex 命令行会自动添加 '<,'>,所以 vim 看到的实际上是 '<,'>exe "'<,'>s/\\%".r."v\\s*//",这会导致错误。我建议在映射时总是更喜欢 noremap,除非你有意地想要递归行为。我已经交换了:;,所以这对我来说是必须的。此外,:no:map 少一键:)
    • 我想这将是我最常用的地图 :) 谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多