[英]vim: use selected line as input of a python function
我是vim的新手。 我想要实现的是vim将在我的文本文件中返回python函数的输出。 我的想法是我选择一部分文本并按F5并获得输出。 复杂的是,这个函数是库的一部分,我必须导入它。 我试过这个
command MyPythonFunction execute "!python from Bio.Seq import reverse_complement; reverse_complement(%)"
map <F5> :MyPythonFunction<CR>
我得到“不允许范围”
选定的行传递给命令的stdin。 所以使用sys.stdin.read()读取它
fun! ReverseComplement()
exec ":'<,'>! python -c \"import sys, Bio.Seq; print Bio.Seq.reverse_complement(sys.stdin.read().rstrip())\""
endfun
vnoremap <F5> :call ReverseComplement()<CR>
编辑
传递一部分线:
vnoremap <F5> d:let @a=system('python -c "import sys, Bio.Seq; sys.stdout.write(Bio.Seq.reverse_complement(\"' . @" . '\"))"')<CR>"aP
"
改变了。 @"
:注册内容"
(剪切内容) .
:连接字符串的二元运算符。 let @a = system(..)
执行外部命令,并且它的输出保存到a
寄存器中。 a
当前光标位置之前寄存器。 首先,您将需要以这样的方式编写您的python部分,即从stdin读取数据然后输出到stdout。 然后,您可以按以下样式应用代码:
fun! DoMyPythonThing() range
exec ":'<,'>! python ./path/to/your/script.py"
endfun
vnoremap <F3> :call DoMyPythonThing()<CR>
ex命令背后的想法:!
是你给它一个可执行程序,vim将可视化文本传递给它,并用程序的输出替换该区域。
请注意函数定义中的range
。 请注意我们仅在可视模式映射中限制自己的映射。 如果您也想挥动鼠标,请考虑在选择模式下进行映射。
**)嗯,可以编写in-vim python来执行此操作,但是这很难测试,你通过调用你去了外部程序路线!
无论如何。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.