ysa*_*sap 4 vim gvim find-and-replace text-formatting
用 替换匹配项时是否可以格式化替换字符串Vim?
假设我有一个包含 2 列表的文件,其中每行中的条目用空格分隔。条目(和行)不是固定宽度。我想通过添加适当数量的空格来格式化表格,使第 2 列项目全部对齐。
例如,给定的表:
A aa
BBBB bbb
CC c
Run Code Online (Sandbox Code Playgroud)
我想要的是:
A aa
BBBB bbb
CC c
Run Code Online (Sandbox Code Playgroud)
(请注意,标签不是这里的解决方案。)
该Vim命令可能类似于:
:0,$ s/\(.*\) \(.*\)/\1(******N)\2/
Run Code Online (Sandbox Code Playgroud)
并且(******N)应该用格式化代码替换以将第二个元素放在第 N 个字符位置。
更新1:所以,Vim 有这个printf()功能。它可以直接从命令提示符使用,还是必须包含在 Vim 脚本中,并在所有行中运行显式循环?
您可能想尝试 vim.org 上的 align 插件之一。我使用 Campbell 博士最流行的一个:http : //www.vim.org/scripts/script.php? script_id= 294
除此之外,是的,您可以从替换命令调用 Vim 函数,但缺点是整个替换模式必须是一个表达式。参见“ :help sub-replace-expression”和“ :help submatch()”。例如,如果我们想用字母计数替换匹配的模式:
:%s/pattern/\=len(submatch(0))/g
Run Code Online (Sandbox Code Playgroud)
所以你使用 printf() 的想法会起作用:
:%s/\(.*\) \(.*\)/\=printf('%-7s %-7s',submatch(1),submatch(2))/
Run Code Online (Sandbox Code Playgroud)