Pregunta

Dibujo un espacio en blanco en esto, y Google no era útil.

¿Quieres hacer una función como esta:

function JakPaste()
        let tmp = :set paste?
        if tmp == "paste"
                set nopaste
        else
                set paste
        endif
endfunction

map <F2> :call JakPaste()<CR>

Sin embargo, esto no funciona. He aislado la línea quebrada:

function JakPaste()
        let tmp = set paste?
endfunction

map <F2> :call JakPaste()<CR>

Al presionar F2 resultados en este error:

Error detected while processing function JakPaste:
line    1:
E121: Undefined variable: set
E15: Invalid expression:  set paste?
Hit ENTER or type command to continue

¿Cómo debo llamar a un comando de ex (conjunto) de una función vim?

Este parece algo relevante, sin embargo todavía no lo entiendo.

¿Fue útil?

Solución

La razón esto no funciona es que usted está tratando de ejecutar un comando en una expresión - esas son cosas diferentes. La construcción ? que utiliza las causas justas vim a hacerse eco del valor de la opción; esto no es lo mismo que una función que devuelve el valor. Para que quede claro:. El problema no es que se está llamando a un comando de una función ex - cada línea de la función es un comando de ex - es así que está llamando el comando ex en una expresión

Sin embargo, esa no es la forma correcta de llevar a cabo la tarea que se está tratando aquí. Aquí está el camino más corto, gracias a la observación de rampion:

set paste!

Ahora, si alguna vez necesitas algo inteligente que simplemente invirtiendo un valor lógico, puede utilizar & para convertir un nombre de opción en una variable utilizable. Aquí hay dos maneras de utilizar que:

" still a function, good for taking extra action (here, printing notification)"
function TogglePaste()
    if (&paste)
        set nopaste
        echo "paste off"
    else
        set paste
        echo "paste on"
    endif
endfunction

" just set the variable directly"
let &paste = !&paste
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top