Function 函数吃掉我的空格字符

Function 函数吃掉我的空格字符,function,vim,escaping,statusline,Function,Vim,Escaping,Statusline,我写了一个函数 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

我写了一个函数

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','\ ','\ ')}
上面的示例应该在数据的每一侧都用空格字符进行包装。但实际情况是,它只在右侧追加空格字符,而不在左侧追加空格字符。为了得到左边显示的空格字符,我必须传递两个转义空格字符(
'\\'
)。我必须提到,它只发生在状态行中。如果我
:调用它按预期工作的函数。

为什么会发生这种情况?

要在
中使用反斜杠和空格:set
,您需要额外的转义,请参阅
:帮助选项反斜杠
。因此,空格前面的反斜杠已经被
:set
命令接受。(您可以通过
:set stl?
进行检查)

如果很难找到正确的转义,另一种方法是使用
:let
命令:

:let &statusline = '...'

但是,您只能在statusline值中使用双引号,或者在引号转义中处理引号。

不,这并不太难。这只是一个必须知道的事实,以避免“意外”的惊喜:)使用
let
的好提示!