簡體   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