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>'