Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向vim中的嵌入式终端发送输入_Python_Vim_Terminal Emulator - Fatal编程技术网

Python 向vim中的嵌入式终端发送输入

Python 向vim中的嵌入式终端发送输入,python,vim,terminal-emulator,Python,Vim,Terminal Emulator,在我的.vimrc文件中,我包含了以下行: autocmd vimenter * botright term 这意味着,每当vim启动时,它将打开右下角的一个端子。 我想创建一个键映射,使vim在终端上运行给定的、动态生成的命令。例如,我已将以下内容添加到我的.vimrc文件中: nmap <leader><leader> <C-w><C-w>python my_python_file.py<CR><C-w><C-w

在我的
.vimrc
文件中,我包含了以下行:

autocmd vimenter * botright term
这意味着,每当vim启动时,它将打开右下角的一个端子。 我想创建一个键映射,使vim在终端上运行给定的、动态生成的命令。例如,我已将以下内容添加到我的
.vimrc
文件中:

nmap <leader><leader> <C-w><C-w>python my_python_file.py<CR><C-w><C-w>
这样文件将在python中运行,最后更改回另一个窗口,以便我可以继续编辑。这管用!但我希望它能适用于任意文件,而不仅仅是名为
my_python\u file.py
的文件。如何做到这一点


我曾考虑过使用
expand('%:p')
获取当前文件的完整路径,但我无法将此字符串作为输入传递到嵌入式终端窗口。我曾尝试编写一个函数来实现这一点,但没有成功。

关键是使用
map…
,以便
可以映射到动态生成的绑定。下面是一个
.vimrc
文件中的代码片段,它适用于Vim 8.0:

" open a terminal directly below current window
nnoremap <leader>t :split<cr><c-w><c-j>:terminal ++curwin<cr><c-w><c-k>
" save current file and run python on it in terminal window directly below
nnoremap <expr> <leader><leader> ':w<cr><c-w><c-j>python ' . expand('%:p') . '<cr><c-w><c-k>'
“打开当前窗口正下方的终端
nnoremap t:split:terminal++curwin
“保存当前文件并在下面的终端窗口中对其运行python
nnoremap':wpython'。展开('%:p')。'
这将映射
t
以打开新的终端缓冲区,并映射
以在该终端缓冲区中运行python。请注意,终端始终处于终端作业模式

为了与NeoVim配合使用,需要对其进行轻微修改:

" open a terminal directly below current window
nnoremap <leader>t :split<cr><c-w><c-j>:terminal<cr><c-w><c-k>
" save current file and run python on it in terminal window directly below
nnoremap <expr> <leader><leader> ':w<cr><c-w><c-j>ipython ' . expand('%:p') . '<cr><c-\><c-n><c-w><c-k>'
“打开当前窗口正下方的终端
nnoremap t:拆分:终端
“保存当前文件并在下面的终端窗口中对其运行python
nnoremap':wipython'。展开('%:p')。'

在NeoVim版本中,在将输入传递到终端之前,我们必须先从终端正常模式切换到终端作业模式,然后再返回到终端正常模式。

您是否查看了
term_sendkeys()
?这也许能实现你想要的。如果你找到了一个解决方案,把它作为一个答案贴出来,我对此也很感兴趣。
" open a terminal directly below current window
nnoremap <leader>t :split<cr><c-w><c-j>:terminal<cr><c-w><c-k>
" save current file and run python on it in terminal window directly below
nnoremap <expr> <leader><leader> ':w<cr><c-w><c-j>ipython ' . expand('%:p') . '<cr><c-\><c-n><c-w><c-k>'