Vim: Appeler une commande ex (ensemble) de la fonction?
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.
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