gpt4 book ai didi

python - 在 vimscript 中使用 Python : How to export a value from a python script back to vim?

转载 作者:IT老高 更新时间:2023-10-28 21:02:01 24 4
gpt4 key购买 nike

我在 vim 中使用 Python 时遇到了困难。
我还没有找到如何将 python 脚本中的值(在 vim 函数中)导入回 vim p.e.

function! myvimscript()

python << endpython
import vim, random, sys
s = vim.eval("mylist")
# do operation with variable "s" in python
endpython

" import variable "s" from above
" do operation with "s" in vimscript
endfunction

1) 如何在 vim 中再次使用 "s" (如何将 "s" 从 python 代码导入回 vim)?

我也不知道如何使用 vim.current.buffer 进行选择。

function! myvimscript()
let startline = line("'<")
let endline = line("'>")

python << endpython
start = vim.eval("startline")
end = vim.eval("endline")
cb = vim.current.buffer
l = cb[start:end]
endpython
endfunction

2) 如何将动态值 "start""end" 分配给 "l"

最佳答案

首先,请定义以大写开头的函数名称。

这是您的两个问题的示例。希望对您有所帮助:

function! TestPy() range

let startline = line("'<")
let endline = line("'>")
echo "vim-start:".startline . " vim-endline:".endline
python << EOF
import vim
s = "I was set in python"
vim.command("let sInVim = '%s'"% s)
start = vim.eval("startline")
end = vim.eval("endline")
print "start, end in python:%s,%s"% (start, end)
EOF
echo sInVim
endfunction

首先我粘贴一个小测试的输出:我视觉选择了 3、4、5、三行和 :call TestPy()

我的输出:

vim-start:3 vim-endline:5
start, end in python:3,5
I was set in python

所以我稍微解释一下输出,您可能需要阅读示例功能代码以理解下面的注释。

vim-start:3 vim-endline:5   #this line was printed in vim,  by vim's echo.
start, end in python:3,5 # this line was prrinted in py, using the vim var startline and endline. this answered your question two.
I was set in python # this line was printed in vim, the variable value was set in python. it answered your question one.

我添加了 range为您的功能。因为,如果你没有它,对于每个视觉选择的行,vim 将调用你的函数一次。在我的示例中,该函数将执行 3 次 (3,4,5)。使用范围,它将视觉选择作为范围处理。这个例子就足够了。如果您的实际功能会做其他事情,您可以删除 range .

range , 最好使用 a:firstline and a:lastline .我用了line("'<")只是为了保持它与您的代码相同。

EDIT 使用列表变量:

检查此功能:

function! TestPy2()
python << EOF
import vim
s = range(10)
vim.command("let sInVim = %s"% s)
EOF
echo type(sInVim)
echo sInVim
endfunction

如果你调用它,输出是:

3
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

“3”表示类型列表(检查 type() 函数)。下面一行是list的字符串表示。

关于python - 在 vimscript 中使用 Python : How to export a value from a python script back to vim?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17656320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com