如何简化这个粘贴计算器

How to simplify this pasting calculator

我在 vim 中实现了一个命令,它将计算结果粘贴到您的文件中,即您键入

:CalP 34 * 89

它应该将结果粘贴到您的光标之后。

代码如下:

command! -nargs=+ CalP :call Calculator(<q-args>) | normal! p
py from math import *

fun Calculator(arg)
  redir @"
  execute "py print " a:arg
  redir END
  let @" = strpart(@", 1)
endfun

这可行,但比我想要的简单操作更混乱,主要是因为:

  1. 我不知道将 py print ... 的输出重定向到 " 寄存器的更好方法
  2. 我必须写 execute "py print " a:arg 因为 py print a:arg 行不通
  3. let @" = strpart(@", 1) 删除了 py print 创建的寄存器前面的杂散换行符,理想情况下应该删除它

我认为这应该可以在一行中完成,但我对脚本的了解还不够vim。

这不需要脚本。在插入模式下,您可以使用 <Ctrl-R>=34*89<CR> 插入该计算的结果。

:help i_CTRL-R
:help expression

我赞同@Amadan 的建议。如果你更喜欢 Python 而不是 Vimscript,你可以使用 pyeval() 函数,例如直接从插入模式:

<C-R>=pyeval('34 * 89')<CR>

如果您想保留自定义命令,也可以:

command! -nargs=+ CalP execute 'normal! a' . pyeval(<q-args>) . "\<Esc>"