繁体   English   中英

vim:使用选定的行作为python函数的输入

[英]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
  • d - >删除所选部分。 副作用:登记内容"改变了。
  • @" :注册内容" (剪切内容)
  • . :连接字符串的二元运算符。
  • let @a = system(..)执行外部命令,并且它的输出保存到a寄存器中。
  • “AP:粘贴的内容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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM