VIM中的字符串格式化令我感到头疼。
我想我觉得我非常习惯在Python中使用字符串格式来指定方式 输出字符串将被分隔,中间有多少空格,依此类推。
所以我有一个VIM插件,可以将信息输出到临时缓冲区,如下所示:
Line: 1 ==>> ErrorName ==>> File Path: /foo
我在将它附加到缓冲区之前构建该字符串,一切都很棒。但是,只要你的行号不同(数字方式)就可以得到这样的结果:
Line: 1 ==>> Error ==>> File Path: /foo
Line: 123 ==>> ErrorNameLong ==>> File Path: /foo
Line: 12 ==>> ErrorShort ==>> File Path: /foo
我尝试过做标签而不是空格,但它只会让它变得更糟(空间变得更大)。所以我理想的最终结果必须是这样的:
Line: 1 ==>> Error ==>> File Path: /foo
Line: 123 ==>> ErrorNameLong ==>> File Path: /foo
Line: 12 ==>> ErrorShort ==>> File Path: /foo
我很清楚有帮助的插件(例如tabular.vim),但由于这是一个插件本身,我不想要求对不同插件的依赖只是为了简单的字符串格式化。
这是我到目前为止所尝试的事情:
在我看来,必须有一个很好的方法,我只是错过了它。
如何在VIM中实现我需要的字符串格式?
答案 0 :(得分:4)
我使用两个小函数,没什么花哨的,一个用于在字符串后面添加填充,另一个用于在字符串前添加。 PrePad函数允许填充字符的可选参数,我有时用它填充前面0的数字。
function! Pad(s,amt)
return a:s . repeat(' ',a:amt - len(a:s))
endfunction
" Pad('abc', 5) == 'abc '
" Pad('ab', 5) == 'ab '
function! PrePad(s,amt,...)
if a:0 > 0
let char = a:1
else
let char = ' '
endif
return repeat(char,a:amt - len(a:s)) . a:s
endfunction
" PrePad('832', 4) == ' 823'
" PrePad('832', 4, '0') == '0823'
Pad()在构建原始日志消息时会很简单。类似的东西:
echo 'Line: ' . Pad(linenum,8) . '==>> ' . Pad(errmsg,12) . '==>> FilePath: ' . path