4

これに空白を描くと、グーグルは役に立ちませんでした。

このような関数を作りたい:

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

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

ただし、これは機能しません。私は破線を分離しました:

function JakPaste()
        let tmp = set paste?
endfunction

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

F2を押すと、次のエラーが発生します。

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)を呼び出すにはどうすればよいですか?

これはやや関連性があるようですが、私はまだそれを理解していません。

4

1 に答える 1

8

これが機能しない理由は、式でコマンドを実行しようとしているためです。これらは別のものです。使用した?構成により、vimはオプションの値をエコーし​​ます。これは、値を返す関数と同じではありません。明確にするために:問題は、関数からexコマンドを呼び出していることではありません-関数の他のすべての行はexコマンドです-それは、式でexコマンドを呼び出していることです。

しかし、それはあなたがここで試みているタスクを実行するための正しい方法ではありません。ランピオンのコメントのおかげで、これが最短の方法です:

set paste!

これで、ブール値を反転するだけでなく、よりスマートなものが必要になった場合&に、オプション名を使用可能な変数に変換するために使用できます。これを使用する2つの方法があります:

" 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
于 2010-03-29T19:10:25.867 に答える