我可以使用Vim的:shell命令打开一个终端,但是我不能同时编辑文件和使用终端。
有没有办法将Vim分成多个窗口(或标签),并在其中一个窗口中打开一个终端?
Neovim 和 Vim 8.2 可以通过 :ter[minal]
命令原生地支持此功能。
有关详细信息,请参见文档中的 terminal-window
部分。
这取决于你所使用的操作系统 - 实际上我没有在Windows上测试过 - 但是Conque是最好的插件之一。
实际上,它可以变得更好,但已经能够正常工作。
:vsp
或者 :sp
- 将vim分割成两个实例,但是你不能只在其中一个实例中使用:shell
。
为什么不显示终端的另一个标签页而不是vim的另一个标签页呢?如果你喜欢这个想法,你可以尝试一下:Ctrl-shift-t
,然后用Ctrl - pageup
和Ctrl - pagedown
来在它们之间移动。
如果你只想要运行一些 shell 命令,你可以在vim中使用!
来执行任何 shell 命令。
例如::!./a.out
。
vim
路径魔法,如下所示::!./%
。 - cprntmux
或screen
(后者仅能水平分割而无需修补程序)来分割终端。但我不知道如何在两个窗格中同时运行一个Vim实例。:term
会打开一个终端窗口。与使用tmux(终端复用器)相比,这种解决方案的优点在于您将拥有与vim
设置相同的窗口绑定。neovim与vim兼容,因此您可以基本上复制并粘贴您的.vimrc
,它就能正常工作。虽然不完全符合您的要求,但您可能会对我的插件vim-notebook感兴趣,它可以使用户保持后台进程的活动状态,并让其评估当前文档的一部分(并将输出写入文档)。 它旨在用于包含要评估的代码片段的笔记本风格文档。
使用 Vim 8.0 或更高版本,您可以通过使用 terminal
功能在 vim 窗口中运行终端仿真器。另外,如果您想在 gVim 或 MacVim 中模拟现代 IDE 终端(如 VSCode 集成终端),可以将以下配置放入您的 vimrc
文件中。
set shell=/path/to/shell
" Make sure to replace `sh.exe` in BufNr("sh.exe") with your shell executable.
nnoremap <expr> <space> BufNr("sh.exe") > 0 ? (&buftype == 'terminal' ? '<c-^>' : ':b '. BufNr("sh.exe") . '<cr>') : ':terminal ++curwin<cr>'
function! BufNr(pattern)
let bufcount = bufnr("$")
let currbufnr = 1
let nummatches = 0
let firstmatchingbufnr = 0
while currbufnr <= bufcount
if(bufexists(currbufnr))
let currbufname = bufname(currbufnr)
if(match(currbufname, a:pattern) > -1)
let nummatches += 1
let firstmatchingbufnr = currbufnr
endif
endif
let currbufnr = currbufnr + 1
endwhile
return firstmatchingbufnr
endf
space
来执行以下操作: