1

我写了一个函数

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它的功能,它会按预期工作。为什么会这样?

4

1 回答 1

2

要在 中使用反斜杠和空格:set,您需要额外的转义,请参阅:help option-backslash. 所以,你在空格前面的反斜杠已经被:set命令占用了。(您可以通过 进行检查:set stl?

如果想出正确的转义太难了,另一种方法是使用以下:let命令:

:let &statusline = '...'

但是,您只能在状态行值中使用双引号,或者处理引号内的引号转义。

于 2014-12-14T12:35:00.197 回答