我写了一个函数
function! BrickWrap(data, icon_align, icon_left, icon_right)
if empty(a:data)
return ''
endif
let l:brick = (a:icon_align ==# 'left') ? a:icon_left . a:data :
\ (a:icon_align ==# 'right') ? a:data . a:icon_right :
\ (a:icon_align ==# 'surround') ? a:icon_left . a:data . a:icon_right :
\ (a:icon_align ==# 'none') ? a:data :
\ ''
if empty(l:brick)
echom 'BrickWrap(): Argument "icon_align" must be "left", "right", "surround" or "none".'
return ''
endif
return l:brick
endfunction
为了格式化在我的状态行中显示的一些数据,例如:
set statusline+=%#User2#%{BrickWrap('some_data','surround','\ ','\ ')}
上面的示例应该在每一侧用空格字符包装数据。但实际上发生的事情是,它只向右侧添加空格字符,而不向左侧添加空格字符。为了获得左侧显示的空格字符,我必须传递两个转义的空格字符('\ \ '
)。我必须提到它只发生在状态线上。如果我:call
它的功能按预期工作。
为什么会这样?
答案 0 :(得分:2)
要在:set
中使用反斜杠和空格,您需要进行其他转义,请参阅:help option-backslash
。因此,:set
命令已经在空格前面反斜杠了。 (您可以通过:set stl?
)
如果提出正确的转义太难了,另一种方法是使用:let
命令:
:let &statusline = '...'
但是,您必须只在状态行值中使用双引号,或者处理引用内引用的引用。