Question

Dessin un blanc à ce sujet, et Google n'a pas été utile.

Vous voulez faire une fonction comme ceci:

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

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

Toutefois, cela ne fonctionne pas. J'isolé la ligne brisée:

function JakPaste()
        let tmp = set paste?
endfunction

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

appuyez sur F2 résultats dans cette erreur:

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

Comment dois-je appeler une commande ex (ensemble) à partir d'une fonction vim?

Cette semble peu pertinente mais je ne comprends toujours pas.

Était-ce utile?

La solution

La raison pour laquelle cela ne fonctionne pas est que vous essayez d'exécuter une commande dans une expression - ce sont des choses différentes. La construction de ? vous avez utilisé des causes justes vim faire écho à la valeur de l'option; ce n'est pas la même en fonction renvoyant la valeur. Pour être clair:. Le problème est pas que vous appelez une commande ex d'une fonction - toutes les autres lignes de la fonction est une commande ex - c'est que vous appelez la commande ex dans une expression

Mais ce n'est pas la bonne façon de mener à bien la tâche que vous essayez ici. Voici le chemin le plus court, grâce au commentaire de raiponce:

set paste!

Maintenant, si vous avez besoin quelque chose de plus intelligent que simplement inverser un booléen, vous pouvez utiliser & pour transformer un nom d'option dans une variable utilisable. Voici deux façons d'utiliser 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top