1

我尝试尽可能多地使用 Vim 来学习它。
今天我不得不写很多数学函数。我写他们喜欢f(x)=e^(x/sqrt(x))(例如废话函数),但这很难读。

我的想法是使用 maxima 的控制台输出并将其插入文本中以获得如下内容:

             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.
  • 如果您已将 vim 配置为重新加载.vimrc文件,那么您应该使用function!而不是,function否则您将收到错误(类似于“[FUNCTIONNAME] 已定义”)
  • system()将其参数的控制台输出作为返回值返回,并将其参数的返回值放入v:shell_error.
于 2014-03-28T20:28:04.543 回答