我喜欢Emacs的一件事是能够在Emacs中运行终端。这可能在Vim内部吗?我知道您可以从Vim执行命令,但是我希望能够在选项卡中运行终端。
#1 楼
更新的答案(11年后...):如果您选择使用该解决方案,我建议使用
tmux
代替下面原始答案中所建议的screen
。Vim 8.1现在具有内置终端,可以使用
:term
命令打开该终端。这提供了与Vim其余功能的更完整的集成。我肯定会推荐
screen
这样的东西。 Vim是文本编辑器,而不是外壳程序。我可以使用Ctrl + AS来水平拆分当前窗口,或者在Ubuntu屏幕和其他修补版本中,可以使用Ctrl + A |(pipe)来垂直拆分。然后使用Ctrl + ATab(或在某些系统上等效的Ctrl + ACtrl + I,可能更容易键入)在窗口之间切换。还有其他命令可以更改窗口的大小和排列。
或者稍稍不先进的使用
screen
就是打开多个全屏窗口并在它们之间切换。这是我通常要做的,我偶尔只使用分屏功能。如果您不熟悉GNU屏幕生存指南的问题,则有很多不错的提示。
评论
+1我只是最近才收到屏幕福音。我不知道我如何没有它。
–枪
09年8月11日在3:30
我宁愿选择tmux而不是屏幕。
–tomaszkubacki
2011年9月2日,下午4:52
是的,当然可以运行屏幕,tmux或终结器,或者打开另一个窗口和alt标签,甚至可以使用通过脚踏板激活的KVM开关。但这不是重点-所有这些解决方案都牺牲了终端和VIM之间的集成,这就是为什么人们不愿意在这个领域中寻找解决方案的原因。我什至不知道这个答案甚至是一个答案,更不用说顶级或公认的答案了。想我会去尝试征服。
–稳定狗
13年2月3日,13:53
最佳答案如何???您需要取消投票,然后投票否决下一个答案,这实际上可以回答您的问题。使用screen不会在vim中运行shell。这就像告诉某人启动另一个Shell。对于那些不断抛出“:!”的人他已经说过,他知道如何执行命令,而这并不是他所要的。这里的嚣张气势如此浓厚,您可以用刀将其切开。
– osirisgothra
14年8月15日在20:19
由于新的vim 8.1功能“终端窗口”,因此应更新此答案。
–艾伦·加里多(Alan Garrido)
18年7月19日在19:01
#2 楼
从2011年8月开始过时查看Conque Shell(也在GitHub上)。使您可以在vim内运行任何交互式程序,而不仅仅是shell。
评论
:ConqueTerm bash
–keflavich
2012年1月25日下午5:11
psihodelia似乎是正确的。我刚刚使用--enable-pythoninterp编译了vim(cygwin并未使用+ python分发vim),并且在安装ConqueTerm之后,我从#set_buffer_settings中得到了一个错误。我无法找到该函数的所在位置,也无法了解错误的含义。该消息包含有关无效参数“ edit ++ enc = utf-8 bash \-\ 2”的语句。啊
–内特·肯尼迪(Nate Kennedy)
2012年7月20日下午4:55
为了了解递归,您必须首先了解递归。
–稳定狗
13年2月3日在14:26
@ŁukaszNiemier VIMCEPTION
–塞巴斯蒂安·格里尼戈利(SebastiánGrignoli)
13年2月16日在2:06
似乎已不再支持此功能,有人可以替代吗?
–堤防
18年4月10日在15:14
#3 楼
我不确定您要实现的目标(我从未使用过Emacs),但是您可以通过输入以下内容在Vim中运行命令::! somecommand [ENTER]
如果您要键入多个命令或在shell中玩一会儿,则可以始终使用:
:! bash (or your favourite shell) [ENTER]
命令或shell终止后,您可以可以选择按Enter键返回到编辑器窗口
Vim特意是轻量级的,并且缺乏执行非编辑类型的功能的能力,就像在Vim中运行成熟的shell一样窗格/选项卡,但是如上所述,有些第三方插件(例如vim-shell)允许您执行这种操作。
通常,如果我想在Vim和我的shell之间切换(Bash ),我只是按CTRL + Z来暂停Vim进程,在我的shell中玩耍,然后在我想回到Vim时键入'fg'-保持我的编辑器和我的shell美观且独立。
评论
如果要将命令的输出复制到当前缓冲区::r!目录
–网络Oliveira
09年8月12日在19:03
我同时使用了Emacs和Vim(并且对Vim有更多的经验)。但是我发现,同时使用两个视图通常更好,更容易(一个视图可以查看正在编辑的内容,另一个视图可以在交互式外壳程序中工作-例如,测试您所进行的配置更改的效果)刚刚编辑)。当我可能需要密切监视的重要事情没有在屏幕上消失时(例如在Vim中使用Ctrl-Z或:shell会发生的情况),这也有助于我的认知,保留和心理工作流程。
–mvanle
2014年3月24日22:02
这是一个很好的答案,它将节省很多时间。
– jerry_sjtu
15年11月18日在4:18
好答案!为了进一步赞美它,我还要添加:r!注释中提到的命令[ENTER]。
–each
19年8月2日在13:49
#4 楼
解决这个问题的方法是:用Ctrl + Z暂停Vim,在终端中播放,
然后返回到与Vim完全相同的位置只需输入命令
fg
即可。评论
:bash是一种更好的方法
–0atman
2012年3月16日11:14
我认为他想要一种类似Dreampie的功能
–亚当·米勒(Adam Miller)
13年1月12日在22:04
@Oatman为什么:!bash比Ctrl + z好? (就是想)
–塞巴斯蒂安·格里尼戈利(SebastiánGrignoli)
13 Feb 16'2:07
@SebastiánGrignoli,因为例如,使用Ctrl + Z可以移动到另一个文件夹,然后按ls依次转到git status等。Ctrl + Z是“暂停”,可以用fg“恢复”。但是,到目前为止,用:!bash只能一次运行一个命令,或者即使一次可以运行多个命令,这仍然不方便。因此总的来说,“ Ctrl + Z”要好得多
–狮子座
2013年6月6日4:17
+1,因为这几乎可以在任何环境中使用。在我无法自定义的外部系统上工作,并且通过廉价的PuTTY shell,这很好用。
–t3sture
17年12月17日在2:45
#5 楼
如果在您的Vim版本中启用了终端,则可以使用:term
命令启动终端。终端窗口支持已添加到Vim 8中。这是一个可选功能,可在使用+编译Vim时启用。终端功能。如果您的Vim版本具有终端支持,则
:echo has('terminal')
将输出“ 1”。输入
:term
将使您进入“终端作业”模式,在该模式下可以按预期使用终端。在Terminal-Job模式下,按
Ctrl-W N
或Ctrl-\ Ctrl-N
可将模式切换为Terminal-Normal,从而可以移动光标并执行命令,类似于Vim的Normal模式。要切换回终端作业模式,请按i
。其他答案提到Neovim中的类似功能。
评论
从ctrl-w-N浏览模式切换后如何使用i切换回Terminal cmd模式的+1。这甚至是tmux的杀手级功能,也可以在Windows上使用。
– radke
17-10-24在13:36
可以使用:term垂直分割吗?
– Vitaly Zdanevich
17年11月8日在10:03
超!很棒,因为它是内置的终端,所以我们不会被更多的插件弄得一团糟。通过brew install vim --override-system-vi和:term完美升级到vim 8。感谢分享!
–LeOn-韩立
18-2-20在5:25
@VitalyZdanevich,:vertical:term将与终端在左侧窗口中垂直拆分。 :vertical:botright:term将在右侧窗口中与终端垂直分割。或者,您可以手动布置窗口,然后使用:term ++ curwin在活动窗口中打开终端。
– dannyadam
18年5月25日在16:08
esc ctrl-w w允许您在Windows之间切换
–user1869582
20年4月9日,0:02
#6 楼
:sh
然后ctrl+d
返回(bash)更新:
您可以在vim中映射
ctrl+d
来运行:sh
,这使您可以在bash和vim之间快速切换。 br /> noremap <C-d> :sh<cr>
评论
我认为ctrl + z和fg稍快一些,因为在这种情况下不必键入:sh。
– Alex
16 Dec 6'在17:51
@Alex不,如果要做地图,则不必键入:sh。在noremap之后,您可以将Ctrl + D从vim切换到sh,由于^ D是EOF,它将终止sh,因此您将返回vim。一键可在sh和vim之间切换。
–InQβ
19-10-10在1:20
#7 楼
Vim 8.1的主要新功能是支持在Vim窗口中运行终端。:term
将在Vim内的另一个窗口中打开终端。评论
这很完美,谢谢!您的回答更多是出于原始问题的精神
– Subelsky
19年6月12日在13:36
嗨,您知道如何退出此模式吗?
–椰子
19年6月13日在10:36
就像在普通终端中一样,退出将退出终端,然后使用:q关闭窗口
– Yossarian42
19年6月13日在12:31
@ user3289737或者,您可以连续两次按Ctrl + W在窗口之间切换。这并非特定于终端窗口,但效果也一样。
– Flarn2006
19年6月24日在4:24
#8 楼
最终在2017年向vim添加了一个本机:terminal
命令。以下摘录自:terminal自述文件:
该功能用于运行终端仿真器在Vim窗口中。可以开始将
作业连接到终端仿真器。例如,要运行shell:
:term bash
或运行构建命令:
:term make myprogram
作业从Vim异步运行,该窗口将更新为
,同时在另一个窗口中编辑时,显示该作业的输出。
评论
终端在同一选项卡的缓冲区中运行。因此,如果您习惯于在vim中使用多个文件,则可能会遇到一些困难。交换缓冲区最终将到达终端,这是一个无法返回的点,您必须杀死终端。只要您知道这一点,就可以了。希望开发人员为此提供解决方法。
– ArunMKumar
18年7月6日在4:54
@ArunMKumar使用[Ctrl + W]从终端“退出”,然后照常执行:bn。无需杀死终端,这也不是没有回报的点:)
– fjardon
18年7月6日在9:09
谢谢,伙计,完全错过了它。我已将:bn映射到某个键,它停止工作,再次恢复工作。是我不好
– ArunMKumar
18年7月10日在8:17
2017?你是说2018年?
– Flarn2006
18年3月3日,2:16
@ flarn2006,关于2017年与2018年之间,Vim 8.1于2018年5月18日在vim.org上发布,其“主要功能”列为“支持在Vim窗口中运行终端”。该功能最早于2017年7月7日在补丁8.0.0693中可用。 github.com/vim/vim/commit/…
– dannyadam
20-4-24在22:03
#9 楼
:term
在Vim 8.1中已添加。
请记住,每当终端窗口处于活动状态时,大多数击键都将简单地传递给终端,而不具有其通常的功能。
Ctrl-W
及其子命令是主要例外。要将文本^W
输入到终端,请按Ctrl-W
。您也可以按.
打开Vim :
命令行。其他Ctrl-W
命令正常运行,因此无论当前选择哪种类型的窗口,管理窗口的功能都相同。评论
它是在vim 8.1之前添加的。这只是vim 8.0.001没有的主要主要功能。这就是为什么它被宣传为vim 8.1新颖性。请参阅Daniel从2017年10月开始的答复以及fjardon在2018年4月得到的答复。-> github.com/vim/vim/blob/master/runtime/doc/version8.txt#L18814
–卢克·赫米特(Luc Hermitte)
18年5月23日在6:39
#10 楼
这个问题已经很老了,但是对于那些发现它的人来说,有一个新的可能的解决方案:Neovim包含一个功能强大的一流终端仿真器,它确实完成了ConqueTerm的尝试。只需运行:term <your command here>
。 <C-\><C-n>
将退出术语模式回到正常模式。如果您像我一样,并且希望转义仍然退出术语模式,则可以将其添加到您的nvimrc中:tnoremap <ESC><ESC> <C-\><C-N>
然后再按两次ESC将退出终端模式进入正常模式,因此您可以操作仍在运行的命令正在写入的缓冲区。
请记住,由于nvim在我发布此答案时正在开发中,可以添加退出终端模式的另一种方法。由于Ctrl + \ Ctrl + n几乎可以从任何模式切换到普通模式,所以我不希望这个答案会出错,但是请注意,如果它不起作用,那么这个答案可能已过时。
https://github.com/neovim/neovim
#11 楼
我知道我没有直接回答这个问题,但是我认为这是一个很好的方法。没有人提及tmux(或至少没有作为独立答案)。 Tmux是类似于屏幕的终端多路复用器。大多数材料都可以在两个多路复用器中完成,但是afaik tmux可以更轻松地配置
。另外,tmux现在比
屏幕要活跃得多,并且周围有相当大的生态系统,例如可以帮助
进行配置的工具,例如
对于vim来说,另一个插件:ViMUX,可以在两个工具之间的交互中提供很大帮助。您可以使用以下命令调用命令:
:call VimuxRunCommand("ls")
该命令在当前窗格vim
下方创建一个小的水平拆分。
如果您不想运行
整个命令,它还可以让您从提示符处运行:
<Leader>vp :VimuxPromptCommand<CR>
因为还不够, vim-vroom:至少有6个“平台特定插件”:
vim-vroom:rspec,cucumber和test / unit的运行程序;通过
g:vroom_use_vimux
提供vimux支持vimux-ruby-test:一组可轻松运行ruby测试的命令
vimux-cucumber:通过Vimux运行Cucumber功能
vim-turbux:使用tmux进行Turbo Ruby测试
vimux-pyutils:vimux的一组函数,允许在ipython中运行代码块
vimux -nose-test:在vimux中运行鼻子测试
这是一个很好的“用例”:使用Vimux和Turbux与Spork和Guard进行按需测试
评论
关心解释为什么它被否决了吗? (这是6年前的答案)
– Pablo Olmos de Aguilera C.
18-11-23在23:02
#12 楼
有人已经建议使用https://github.com/Shougo/vimshell.vim,但是他们没有提及原因。因此,当我摆脱这个问题时,我浪费了很多其他时间来尝试其他(排名更高)的选项。Shougo / vimshell是答案。原因如下:
除了作为终端仿真器之外,VimShell还允许您在正常和可视模式下浏览终端输出。因此,如果您运行的命令导致您只想使用键盘进行复制和粘贴的输出... VimShell可以解决此问题。
没有提到的其他选项,包括NeoVim中的:terminal命令可以做到这一点。 Neovim的:terminal接近,但截至2017年2月18日,至少在以下方面有所欠缺:
将光标移动到缓冲区的末尾,而不是最后使其保持与VimShell相同的位置。浪费大量时间。
不支持
modifiable = 1
,请参阅Github上的讨论,因此无法使用vim-easymotion之类有用的插件。 不像Vimshell那样支持行号的显示。
不要在其他选项上浪费时间,包括Neovim的:terminal。使用VimShell。
评论
NeoVim确实允许您在普通/可视模式下从终端输出中导航和复制。我一直都这样做。使用NVIM 0.1.6-dev
–爱丽丝·希顿(Alice Heaton)
16-10-27在9:17
谢谢,我将尝试VimShell。不过,我已自由删除答案中的错误陈述。正如@Alice指出的那样,NeoVim的:terminal绝对可以做到这一点。
–康拉德·鲁道夫(Konrad Rudolph)
17年2月9日,11:10
:terminal在导航和编辑以及基本方式上不能与:VimShell相同。请参阅上面的说明编辑。
–user3751385
17-2-18在17:24
#13 楼
您可能想看看:sh
命令(请参阅Vim中的:help sh
)。各种命令
评论
因此,请勿将zsh与vim一起使用。 set shell = / bin / sh将使vim在其命令中使用安静的shell。
–罗斯压机
2015年2月13日在18:18
#14 楼
不,您不能:http://vimdoc.sourceforge.net/htmldoc/tips.html#shell-window
评论
不要采取splitvt的建议-它会破坏颜色控制代码,并使vim完全无法使用。
–new123456
2011年6月24日23:22
“否”是一个不好的答案。更好的答案是“默认情况下不。”从技术上讲,这是可以做到的,也许您需要编写新的源代码并自己对其进行编译,或者编写一个插件。这简单吗?也许不是,但是可以做到。简单地说“不”更像是说“不,我不会那样做”。
–trusktr
13年4月6日,下午1:53
@AnishRamaswamy仍然无法使用普通vim在vim缓冲区中运行shell(与emacs不同)。这就是OP的问题。
–琥珀色
2014年2月26日在22:47
@Amber,是的,除了OP没有提到使用stock vim之外,还可以。
–阿尼什·拉马斯瓦米(Anish Ramaswamy)
2014年2月26日在22:50
有人应该编辑此答案以说您无法使用stock vim做到这一点。
–still_dreaming_1
2014年4月7日14:25
#15 楼
我所知道的唯一方法是使用第三方补丁vim-shell。评论
简单起见,vim-shell是一个补丁,而不是“附加组件”(至少对我而言,意味着它是脚本)。我还没有亲自尝试过,但是不幸的是,Vim wiki上的vim-shell页面提示它不会与Vim 7.1+一起编译。
–紫杉
09年8月6日14:38
更改为安抚脚步。 :)(输入的字符长度超过15个字符。“固定”的时间不够长)
–罗马
09年8月6日在16:52
Shougo / vimshell(github.com/Shougo/vimshell.vim)似乎运行良好。它确实需要构建一个动态库,但这非常简单(cd
–Wayne Walker
2015年10月27日在18:53
#16 楼
我现在使用它,您可以尝试。 VimShell#17 楼
尝试使用vterm,它是vim中几乎所有功能的shell。它具有悠久的历史和明确的功能,但仍处于开发阶段,但仍然相当不错。#18 楼
假设您的vim版本首先支持+term
命令,请将vim的shell设置为在一个命令中使用(例如set=/usr/bin/zsh
),然后运行命令+term
(即bo 15vs +term
)。您可能需要对窗口进行一些其他操作(即删除其中一个窗口并旋转窗口),但是您将拥有终端。 #19 楼
我承认我并没有严格回答您的问题,但是在同一窗口中使用Vim和Terminals时,对我来说更好的方法是Tmux(类似于屏幕,这是一种“在后台运行的软件”,尽管这篇文章将帮助您了解它们如何协同工作:“ Tmux和Vim —更好地在一起”。
通过这种方式,我们可以将Vim转换为功能强大的IDE
#20 楼
分割屏幕并运行命令term ++curwin
以运行Vim缓冲区内的终端。以下命令可以同时为我工作::bo 10sp | term ++curwin
评论
相关:stackoverflow.com/q/1879219/1569是:!
从Vim 8.0开始,有一个:term命令可以在一个新的分割窗口中打开一个新的终端。如果它不适合您,请检查vim --version | grep -o .terminal,查看此功能是否可用(+端子)或不可用(-端子)。
要使用:term,要退出终端拆分,请使用ctrl W和:q