我已经习惯了Emacs,但是我正在试用Vim,看看我更喜欢哪个。

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


当前回答

自2017年以来,在vim中使用终端打开一个新标签是可能的,正如@fjardon所说:

只需输入::terminal。默认情况下,它将在当前选项卡上方打开一个选项卡。

如果你想在其他地方打开它,你可以尝试以下选项:

:在终端下方:打开当前选项卡下方的终端。 :下方垂直端子:始终垂直向右打开端子。

你可以玩这些,直到你找到你喜欢的。在这之后,你可以在你的.vimrc配置文件中设置一个映射,对我来说,我使用:

nmap <leader>tt :below vertical terminal<CR>

这样我可以输入<空格>tt(空格我的领导键)来快速打开它。

作为旁注:

你可以切换你的选项卡(终端和其他缓冲区)与Ctrl+W Ctrl+W。 如果你想用Ctrl+W N复制你的命令,用i或a进入普通终端模式,你可以在终端中进入可编辑模式。

干杯!

其他回答

2011年8月过时

看看征服壳(也在GitHub上)。允许您在vim中运行任何交互程序,而不仅仅是一个shell。

更新答案(11年后…):

如果您选择使用tmux解决方案,我建议使用tmux而不是下面原始答案中建议的screen。 Vim 8.1现在有一个内置的终端,可以用:term命令打开。这提供了与其余Vim特性更完整的集成。


我肯定会推荐这样的检查。Vim是一个文本编辑器,而不是一个shell。

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

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

如果你不熟悉GNU屏幕生存指南问题的使用,它有很多好的提示。

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

Shougo/vimshell就是答案。原因如下:

除了作为终端模拟器外,VimShell还允许您以正常和可视模式在终端输出中导航。因此,如果您运行的命令导致您只想使用键盘复制和粘贴输出…VimShell涵盖了这一点。

上面提到的其他选项,包括NeoVim中的:terminal命令,都不能做到这一点。截至2017年2月18日,Neovim的终端已经接近,但至少在以下方面还不够:

将光标移动到缓冲区的末尾,而不是像VimShell那样将光标保持在最后一个位置。太浪费时间了。 不支持modifiable = 1参见Github上的讨论,所以像vim-easymotion这样的有用插件不能使用。 不像Vimshell那样支持显示行号。

不要在其他选择上浪费时间,包括Neovim的:终端。用VimShell吧。

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

:sh然后按Ctrl+D返回(bash)

更新:

您可以将vim中的Ctrl+D映射为run:sh,这允许您在bash和vim之间快速切换。

noremap <C-d>:sh<cr>