首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Vim:从函数调用ex命令(set)?

Vim:从函数调用ex命令(set)?
EN

Stack Overflow用户
提问于 2010-03-30 03:03:35
回答 1查看 2.9K关注 0票数 4

在这一点上一片空白,谷歌也帮不上忙。

我想做一个这样的函数:

代码语言:javascript
代码运行次数:0
运行
复制
function JakPaste()
        let tmp = :set paste?
        if tmp == "paste"
                set nopaste
        else
                set paste
        endif
endfunction

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

然而,这并不起作用。我已经隔离了这条虚线:

代码语言:javascript
代码运行次数:0
运行
复制
function JakPaste()
        let tmp = set paste?
endfunction

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

按F2会导致以下错误:

代码语言:javascript
代码运行次数:0
运行
复制
Error detected while processing function JakPaste:
line    1:
E121: Undefined variable: set
E15: Invalid expression:  set paste?
Hit ENTER or type command to continue

我应该如何从vim函数调用ex命令(set)?

This看起来有点相关,但是我还是不明白。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-30 03:10:26

这不起作用的原因是,您试图在表达式中运行命令-这是不同的事情。您使用的?构造只会导致vim回显选项的值;这与返回值的函数不同。需要说明的是:问题不在于从函数中调用ex命令-该函数的每隔一行都是ex命令-而是您在表达式中调用ex命令。

但这不是执行您在这里尝试的任务的正确方式。以下是最短的方法,感谢rampion的评论:

代码语言:javascript
代码运行次数:0
运行
复制
set paste!

现在,如果您需要比简单地反转布尔值更聪明的方法,您可以使用&将选项名转换为可用的变量。这里有两种方法来使用它:

代码语言:javascript
代码运行次数:0
运行
复制
" 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
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2540524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档