1

Vim を学ぶために、できる限り Vim を使用するようにしています。
今日は、たくさんの数学関数を書かなければなりませんでした。私はそれらをf(x)=e^(x/sqrt(x))(たとえばナンセンス関数)のように書きましたが、これは非常に読みにくいです。

私の考えは、マキシマのコンソール出力を使用し、それをテキストに挿入して次のようなものを取得することでした:

             x
          -------
          sqrt(x)
f(x) := e

これは非常に読みやすいです。

私はすでに多くの maxima コマンドを知っているので、maxima 構文で式を書き、この素晴らしい出力でそれらを取得することは非常に簡単で生産的です:)

私はvimscriptの経験がまったくありませんでした。これどうやってするの?

4

2 に答える 2

4

(レンダリングされた数式)出力をstdoutに返す外部コマンドがある限り、:read! {cmd}コマンドは出力を(現在の行の下または先頭に追加された[range]:

:read! maxima --very-quiet -r "formula"

このためのカスタム コマンドも作成できます。

:command! -nargs=1 -range Maxima execute '<line1>,<line2>read! maxima --very-quiet -r' shellescape(<q-args>, 1)
于 2014-03-28T20:37:57.963 に答える
3

私は自分の~/.vimrcファイルでこれを使用します:

 " calls maxima --very-quit -r "[ARG];"
 function! AsciiMath(formula)
   let cmdln='maxima --very-quiet -r "'.a:formula.';"'
   let @a=system(cmdln)
   if !v:shell_error
 "    echo @a
     put a
   else
     echo '"'.a:formula.'" is an invalid maxima expression"'
   endif
 endfunction 

そしてそれを次のように呼び出します:
:call AsciiMath("f(x):=e^(x/sqrt(x))")

関数は理解するのが簡単だと思いますが、いくつかのトリッキーな部分があります:

  • put引数としてレジスタが必要です および を参照:h registersしてください:h put
  • formula接頭辞 (名前空間) が必要なように引数をa:使用することはできませんa:formula
  • .vimrcファイルをリロードするようにvimを構成している場合は、function!代わりに使用する必要がありfunctionます。そうしないと、エラーが発生します(「[FUNCTIONNAME]はすでに定義されています」など)
  • system()は、その引数のコンソール出力を returnvalue として返し、その引数の戻り値を に入れますv:shell_error
于 2014-03-28T20:28:04.543 に答える