如何在vim文本文件中进行多次计算?

3
我想将多个计算结果插入到我的文本文档中:
2**3 = (the result)   
2**4 =         
..   
2**30 =

(** = 指数运算)
有人能帮我吗?

P.S.:
如果不使用 .vimrc,只是为了进行快速操作,那么在 vim 中具有一种立即脚本编写的功能会很好。

例如:
for i in range (3,30)
print "2**".i."=".2**i
endfor

4个回答

3
如果你偏爱Python,并且你的vim编译支持它,那么你可以利用它:
:py import vim
:py for i in range(3, 30): vim.current.buffer.append("2**%d = %d" % (i, 2**i))

如果您需要更复杂的功能,可能需要编写代码块而不是一行代码。这是一种方法,但在交互式命令行上执行起来并不方便,但仍然可行:

:py << EOF
import vim
for i in range(3, 30):
  for j in range(1, 3):
    vim.current.buffer.append("{}x{}".format(i, j))
EOF

更复杂的内容应该写在脚本文件中,并在需要时引用它们。

在Python(使用vim)中创建双重循环是否可能?这不起作用:py for i in range(3, 30): for j in range (1, 10): vim.current.buffer.append("2**%d = %d" % (i, 2**j)) - Reman
1
@Remonn:Python不理解那种单行代码。请使用我在答案中编辑的块注释。 - mike3996

3
您可以使用特殊寄存器=在Vim中执行数学运算,例如,如果您在插入模式下输入:
2+3=<C-R>=2+3<CR>

你会得到:

2+3=5

附注: <C-R> 表示按下 CTRL+r,<CR> 表示按下回车键。


简单而有效! - Enlico

2
您可以像这样编写 for...loop
:for i in range(3, 30) | call setline(i-2, printf('2**%d = %d', i, float2nr(pow(2, i)))) | endfor

另一种方法是将消息重定向到文件中:
:redir! >output.txt
:for i in range(3, 30) | echo printf('2**%d = %d', i, float2nr(pow(2, i))) | endfor
:redir END
:e output.txt

哇..我不知道我可以在命令行中用for..loop做到这一点。谢谢你。你能告诉我更多它确切的作用是什么吗? - Reman
printf() 的参数不足。尝试使用 printf('%d*%d = %d', i, i, i*i) - kev
你可以将消息重定向到文件(output.txt)或寄存器(x),然后读取文件(:r output.txt)或将寄存器中的内容放置("xp)。 - kev
1
@Remonn:还可以考虑使用call append('.', map(range(3, 30), '"2**".v:val." = ".string(pow(2,v:val))'))或者call append('.', map(range(3, 30), 'printf("2**%d = %.0f", v:val, pow(2,v:val))')) - ib.
1
@Remonn:这种方法也可以。但请注意,与for循环方法不同的是,在实际追加之前,要插入的所有字符串都会完整地在内存中填充。 - ib.
显示剩余3条评论

1

以下方法也可行

写几行代码,比如Python

total = 0.0
for i in range(10):
   total += i*i
print total

然后通过可视化选择行(使用shift-v),并键入:!python。你应该实际看到的是:'<,'>!python,然后你键入的行应该被Python输出所替换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接