21

私はvimでPythonに苦労しています。
Pythonスクリプト(vim関数内)からvim peに値をインポートする方法がまだわかりません

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 で再度使用するにはどうすればよいですか ( python コードから vim "s"にインポートするにはどうすればよいですか)?"s"

選択範囲で 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

"start"2)動的な値をどのように割り当てることができます"end""l"

4

3 に答える 3

26

まず、大文字で始まる関数名を定義してください。

これがあなたの2つの質問の例です。私はそれが役立つことを願っています:

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、3 行、および: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 が関数を 1 回呼び出すためです。私の例では、関数は 3 回 (3,4,5) 実行されます。range を使用すると、visualselection を範囲として処理します。この例では十分です。実際の関数が何か他のことをする場合は、range.

range、より良いa:firstline and a:lastline。私はline("'<")あなたのコードと同じに保つためだけに使用しました。

リスト変数で編集:

この機能をチェックしてください:

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() 関数を確認してください)。その下の 1 行はリストの文字列表現です。

于 2013-07-15T14:57:06.950 に答える