2011-02-06 21 views
5

He visto a menudo asignaciones a las variables de la forma "dejar que s = 'algo'." Aquí está la parte específica de código en una secuencia de comandos de vim que he estado luchando por entender:¿Qué significa ". =" In vim scripts?

let s .= '%' . i . 'T' 
let s .= (i == t ? '%1*' : '%2*') 
let s .= ' ' 
let s .= i . ':' 
let s .= winnr . '/' . tabpagewinnr(i,'$') 
let s .= ' %*' 
let s .= (i == t ? '%#TabLineSel#' : '%#TabLine#') 

El código agrega el número de ficha (i) y el número de ventana gráfica (winnr de tabpagewinnr(i,'$')) al nombre de la pestaña, de modo que se asemeje a "1: 2/4 Nombre de memoria intermedia". Por lo que parece, la operación .= parece estar agregando cosas al s. Pero entonces, no entiendo lo que hacen las dos primeras líneas. Cualquier ayuda es apreciada.

+2

'' = es el operador de concatenación de cadenas de acceso directo.. Básicamente es 's = s. algo malo –

Respuesta

7

de vim onlinehelp es su amigo:

:h .=

:let {var} .= {expr1} Like ":let {var} = {var} . {expr1}". 

:h expr-.

expr6 . expr6 .. String concatenation 

:h expr1 (bien - esto es un poco difícil de encontrar):

expr2 ? expr1 : expr1 

The expression before the '?' is evaluated to a number. If it evaluates to 
non-zero, the result is the value of the expression between the '?' and ':', 
otherwise the result is the value of the expression after the ':'. 
Example: 
    :echo lnum == 1 ? "top" : lnum 

    Since the first expression is an "expr2", it cannot contain another ?:. The 
    other two expressions can, thus allow for recursive use of ?:. 
    Example: 
    :echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum 

    To keep this readable, using |line-continuation| is suggested: 
    :echo lnum == 1 
    :\ ? "top" 
    :\ : lnum == 1000 
    :\  ? "last" 
    :\  : lnum 

    You should always put a space before the ':', otherwise it can be mistaken for 
    use in a variable such as "a:1". 
0

Uno a la vez:


let s .= '%' . i . 'T' 

Suponiendo i = 9 y s = "bleah", s será ahora "bleah% 9T"


let s .= (i == t ? '%1*' : '%2*') 

Este es el operador ternario familiar de C. Si t == 9, entonces s ahora es "bleah% 9T% 1 *". Si t es nada pero 9, entonces s es ahora "bleah% 9T% 2 *"