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

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


当前回答

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

用Ctrl + Z暂停Vim, 在终点站玩, 然后只需输入命令fg,就可以返回到您离开Vim时的位置。

其他回答

如果你对快速回答感兴趣,这里是::vert术语。它会垂直分割你的屏幕并打开终端。

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

更新:

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

noremap <C-d>:sh<cr>

如果在您的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中类似的功能。

有人已经建议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吧。

我承认我并没有严格地回答你的问题,但是对我来说,在同一个窗口中使用Vim和终端时工作得更好的是Tmux(这是一种“在后台运行的软件”,类似于屏幕,尽管这个更适合分割和制表符)。

这篇文章将帮助你理解它们是如何一起工作的:“Tmux和Vim -更好的一起工作”。

通过这种方式,我们可以将Vim转换为强大的IDE