将pythonvim脚本中的文本字符串发送到tmux窗格
我以以下方式同时使用Vim(8.0)和tmux(2.3):在tmux会话中,我将一个窗口拆分为两个窗格,其中一个窗格在Vim中打开了一些文本文件,另一个窗格有一些程序,我想向其中发送几行文本。一个典型的用例是将Python脚本中的行发送到另一个窗格中运行的IPython会话 我是通过一个使用python的Vim脚本来实现这一点的,代码片段示例(假设目标tmux窗格为0):将pythonvim脚本中的文本字符串发送到tmux窗格,python,vim,tmux,Python,Vim,Tmux,我以以下方式同时使用Vim(8.0)和tmux(2.3):在tmux会话中,我将一个窗口拆分为两个窗格,其中一个窗格在Vim中打开了一些文本文件,另一个窗格有一些程序,我想向其中发送几行文本。一个典型的用例是将Python脚本中的行发送到另一个窗格中运行的IPython会话 我是通过一个使用python的Vim脚本来实现这一点的,代码片段示例(假设目标tmux窗格为0): py导入vim python脚本 您正在寻找shellescape()函数。如果您使用:Vim命令,{special}参数必
py导入vim
python脚本
您正在寻找shellescape()
函数。如果您使用:
Vim命令,{special}
参数必须为1
silent execute '!tmux send-keys -t 0 -l ' . shellescape(cmd, 1)
但是,由于您对(显示)shell输出不感兴趣,并且不需要与启动的脚本交互,因此我将从:代码>到较低级别的system()
命令
call system('tmux send-keys -t 0 -l ' . shellescape(cmd))
python
使用Python(而不是纯Vimscript)没有任何好处(至少在您问题的小片段中)。相反,如果将Pythoncmd
变量嵌入到Vimscript表达式中,那么现在还需要一个Python函数以Vimscript字符串的形式转义该值(类似于'%s'%str(cmd).replace(“',”))
)。或者,您可以在一个Vim变量中维护该值,并通过Vim从Python访问它。vars
可能想研究使用Tim Pope的方法。当我使用Vim变量时,我仍然必须手动转义;
无论它是否由let a=“”定义;“
或让a=';”
。这是为什么?好吧,我明白了,这是tmux/shell行为,我猜shell会解释像;
或!
这样的字符。奇怪的是,如果我在这些字符后添加空格,它们就会被发送出去。对不起,最后一句话/Q:如果我使用shellcmd(getline(“)
,除了一个;
(除非后面有空格,;
发送正常)
call system('tmux send-keys -t 0 -l ' . shellescape(cmd))