如何在Vim内部运行终端?

如何在Vim内部运行终端?,vim,Vim,我已经习惯了Emacs,但我正在尝试Vim,看看我更喜欢哪一个 关于Emacs,我喜欢的一点是在Emacs内部运行终端的能力。这在Vim内部可能吗?我知道您可以从Vim执行命令,但我希望能够在选项卡内运行终端。不,您不能: 据我所知,唯一的方法是使用第三方补丁。我不确定您到底想要实现什么(我从未使用过Emacs),但您可以通过键入以下命令在Vim中运行命令: :! somecommand [ENTER] 如果您想键入多个命令,或在shell中玩一段时间,则始终可以使用: :! bash (or

我已经习惯了Emacs,但我正在尝试Vim,看看我更喜欢哪一个

关于Emacs,我喜欢的一点是在Emacs内部运行终端的能力。这在Vim内部可能吗?我知道您可以从Vim执行命令,但我希望能够在选项卡内运行终端。

不,您不能:


据我所知,唯一的方法是使用第三方补丁。

我不确定您到底想要实现什么(我从未使用过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友好且独立。

更新的答案(11年后…):
  • 如果您选择使用该解决方案,我建议您使用
    tmux
    而不是下面原始答案中建议的
    screen
  • 现在有一个内置终端,可以用
    :term
    命令打开。这提供了与其他Vim功能更完整的集成

我绝对会推荐这样的东西。Vim是一个文本编辑器,而不是shell

我会使用Ctrl+AS水平分割当前窗口,或者在Ubuntu的屏幕和其他补丁版本中,可以使用Ctrl+A |(管道)垂直分割。然后使用Ctrl+ATab(或在某些系统上相当于Ctrl+ACtrl+I,这可能更容易键入)在窗口之间切换。还有其他命令可以更改窗口的大小和排列

或者,
screen
的一个不太高级的用法就是打开多个全屏窗口并在它们之间切换。这是我通常做的,我只是偶尔使用分屏功能


如果您不熟悉它的用法,这个问题有很多好的提示。

您可能想看看
:sh
命令(请参阅Vim中的
:help sh


我解决这个问题的方法是:

  • 按Ctrl+Z暂停Vim
  • 在候机楼玩
  • 然后,只需键入命令
    fg
    ,就可以返回到您离开Vim的确切位置

    • 从2011年8月起过期


      退房(也在网上)。允许您在vim中运行任何交互式程序,而不仅仅是一个shell。

      :sh
      然后
      ctrl+d
      返回(bash)

      更新

      您可以将vim中的
      ctrl+d
      映射到运行
      :sh
      ,这允许您在bash和vim之间快速切换


      noremap:sh

      我知道我没有直接回答这个问题,但我认为这是一个问题 好办法。没有人提到过tmux(或者至少没有提到它是一个 独立答案)。Tmux是一种类似终端多路复用器的屏幕。最 这两种多路复用器都可以制作,但afaik tmux更容易 配置。而且,目前tmux的开发比以前更加积极 屏幕上,有一个相当大的生态系统围绕着它,像工具,帮助 配置,ecc

      另外,对于vim,还有另一个插件:,它在 这两种工具之间的交互。可以使用以下命令调用命令:

      :调用vimuxrun命令(“ls”)

      该命令在当前窗格vim下方创建一个小的水平分割 他在

      如果您不想运行,它还可以让您在提示符下运行 整个指挥部:

      vp:VimuxPromptCommand

      由于不够,至少有6个“特定于平台的插件”:

      • :rspec、Cumber和测试/单元的转轮;vimux支持通过
        g:vroom\u use\u vimux
      • :一组用于轻松运行ruby测试的命令
      • :通过Vimux运行Cucumber功能
      • :使用tmux进行turboruby测试
      • :vimux的一组函数,允许在ipython中运行代码块
      • :在vimux中运行前端测试

      这里有一个很好的“用例”:

      Try,它是vim内部的一个功能非常完整的shell。它的历史和清晰的功能都有点问题,还在开发中,但它仍然很好

      我现在使用它,你可以试试

      这个问题已经很老了,但是对于那些发现它的人来说,有一个新的可能的解决方案:Neovim包含一个成熟的、一流的终端仿真器,它正是ConqueTerm想要做的。只需运行
      :term

      将退出术语模式返回正常模式。如果您和我一样,更喜欢退出术语模式,您可以将此添加到nvimrc:

      tnoremap <ESC><ESC> <C-\><C-N>
      
      tnoremap
      
      然后按ESC两次将退出终端模式回到正常模式,因此您可以操作仍在运行的命令正在写入的缓冲区

      尽管请记住,在我发布这个答案时,由于nvim正在进行大量开发,可能会添加另一种退出终端模式的方法。当Ctrl+\Ctrl+n从几乎任何模式切换到正常模式时,我不认为这个答案会出错,但请注意,如果它不起作用,这个答案可能已经过时了

      已经有人提出了建议,但他们没有提到原因。因此,当我离开这个问题时,我浪费了很多时间尝试其他(排名更高的)选项

      就是答案。原因如下:

      除了作为终端仿真器,VimShell还允许您在中导航终端输出
       :term bash
      
       :term make myprogram
      
      :bo 10sp | term ++curwin
      
      nmap <leader>tt :below vertical terminal<CR>