Send literal string from python-vim script to a tmux pane
我通过以下方式一起使用 Vim (8.0) 和 tmux (2.3):在 tmux 会话中,我将一个窗口拆分为 2 个窗格,一个窗格在 Vim 中打开了一些文本文件,另一个窗格有一些程序我想向其发送文本行。一个典型的用例是将 Python 脚本中的行发送到在另一个窗格中运行的 IPython 会话。
我正在通过一个使用 python 的 Vim 脚本执行此操作,代码片段示例(假设目标 tmux 窗格为 0):
1 2 3 4 5 6 | py import vim python << endpython cmd ="print 1+2" vim_cmd ="silent !tmux send-keys -t 0 -l "" + cmd +""" # -l for literal vim.command(vim_cmd) endpython |
这很好用,除了当
那么,有没有一种通用的方法来告诉 Vim 不解释任何内容,只获取一个原始字符串并按原样发送?如果不是,为什么
Vimscript
您正在寻找
1 | silent execute '!tmux send-keys -t 0 -l ' . shellescape(cmd, 1) |
但是由于您对(显示)shell 输出不感兴趣,并且不需要与启动的脚本进行交互,所以我将从
1 | call system('tmux send-keys -t 0 -l ' . shellescape(cmd)) |
Python
使用 Python(而不是纯 Vimscript)没有任何好处(至少在您问题中的小片段中)。相反,如果你将 Python
访问它