:!
或:r!
执行外部命令,并可以选择将其输出插入文本。我什至可以执行:!sh
,然后生成一个将一直存在的外壳,直到退出该外壳为止-但是,当该外壳处于活动状态时,Vim处于“睡眠状态”且无法访问。如果我想暂时返回Vim,我必须退出shell,并生成一个新的shell-不太有用。我可以在另一端访问shell,方法是使用^ Z和通过
bg
,fg
和jobs
管理Vim作业。这更有意义,但从长远来看非常麻烦。我可以使用Screen
(如果它不可用)(通常不可用),或者打开我的窗口管理器的几个窗口(然后按ssh依次从每个窗口中定位主机),以使vim和shell都位于远程主机上,这又很麻烦。 )如果Vim允许我打开一个shell会话并将其保存在其(内部)窗口之一中,或者让我切换回它,那将是最愚蠢的。这样可能吗?
#1 楼
有几个vim插件可以做到这一点。我使用Conque(Github)。将其放入您的插件目录后,您需要做的是:
:ConqueTermSplit bash
在vim中将有一个交互式bash shell。然后,您可以使用常规的vim手势在窗口中执行其他操作。
另一个插件是vimshell。
评论
没有插件,没有办法做这样的事情吗?
– SF。
2015年2月6日,14:12
@SF参见:help shell-window。 (简短回答:否。)
–muru
2015年2月6日14:24
#2 楼
我相信使用VIM的插件并不是很好,尽管IMO vimshell最接近。但是,您需要了解这是一个两部分的问题。VIM并非旨在执行此类操作,特别是麻烦的是能够执行任何长时间运行的任务,并且异步交谈而不阻塞VIM。在这种情况下,不仅是shell本身,而且是您可能在shell进程中执行的其他任务。
VIM的模态哲学不能很好地发挥我们与shell交互的方式。在外壳程序中,只有当前行是可编辑的,尽管您可以滚动查看带有外壳程序的历史记录的较旧文本,但无法对其进行编辑。这根本不符合VIM的原理,如果您按ESC键并返回到正常模式,将很难禁止用户返回并编辑上面的部分历史记录。
在我看来,有两种方法在这方面效果更好。
使用TMUX / Screen和Multiplex终端窗口同时具有vim和shell。这样,两者就可以很好地分开,但是您可以轻松地查看两者,并且可以在不影响彼此流程的情况下尽最大可能发挥作用。
使用tpope / vim-dispatch之类的插件您可以轻松地启动一个脱机命令,并使它们在实际的终端外壳中在后台异步运行,并在完成后将结果拉回到vim中。这也为您提供了两者之间相同的隔离级别,因此两者可以再次发挥出自己的最大能力,而不会踩到对方的脚趾。
我还要补充一点,那就是NeoVIM的核心目标之一是能够异步执行作业,因此NeoVIM可能会在这方面带来改变。但在那之前,这是我认为最好的。
#3 楼
在:help shell-window
中,我们可以了解有关在窗口中执行Shell命令的信息: 答案:你不能!
包括这将在Vim中添加很多代码,这是不这样做的一个很好的理由。毕竟,
Vim是编辑器,不应执行非编辑任务。
但是,要获得类似的信息,您可以尝试使用“ splitvt”程序拆分终端屏幕或显示窗口。
另一种方法是
“在BSD Unix系统上找到的“窗口”命令,该命令支持多个重叠的窗口。或“屏幕”程序。
,但是您可以使用的解决方案很少:
使用特别的
screen
为此类事物设计的,例如:Ctrl + a,S可以水平拆分当前窗口
Ctrl + a,X可以删除当前区域
Ctrl + a,Q可以删除除一个区域之外的所有区域
有关更多信息,请参见:stackoverflow SE上的GNU屏幕生存指南
或者:GNU屏幕拆分,屏幕快速参考以获取更多详细信息。
VIM-Shell-第三方补丁
VIM-shell是VIM的扩展,具有分离的窗口,
,此修补程序使在这些窗口中启动shell成为可能。它
仅适用于POSIX系统
vterm-vim中的终端仿真器。
vterm的目标是为了在vim中提供unix终端的克隆,它可以直接使用而没有任何依赖性。
受tslime.vim的启发,该插件可让您将输入发送到tmux,vimux可以轻松地与vim中的tmux进行交互。
其他已经提到:征服
相关:如何在vim内运行终端?在stackoverflow
评论
如何摆脱分裂? :-/
– 0xc0de
15年7月31日在9:58
请参阅:GNU屏幕拆分
– Kenorb
15年7月31日在10:00
评论
因此,基本上,您想在:split中打开外壳程序,同时在另一个窗口中保留文件吗? ...这听起来像是tmux或屏幕的工作...@Carpetsmoker:我经常无法控制远程系统上安装的内容,而且往往两者都不是,而Vim总是在那里。
考虑切换到Neovim。现在,它具有一个内置的终端仿真器,可以很好地运行,并且可以在vim缓冲区中打开。
如此处建议的,现在似乎出现了:terminal命令