繁体   English   中英

如何从 VIM 在新选项卡中打开终端?

[英]How to open a terminal in new tab from VIM?

当我使用 4 个文件时,所有文件都在选项卡(VIM)中打开。 我想保存更改并编译它而不必关闭选项卡,即我想在新选项卡中打开一个终端以及现有的 4?

我应该如何在 VIM 中执行此操作?

:tab ter

在新选项卡中打开终端,而不是像:ter那样在新窗口中打开终端。 您还可以使用等效的更长的:tab terminal形式。

在此 Reddit 帖子中感谢用户 wolloda。

额外的信息

  • 使用Ctrl-dexit终止 shell 会关闭终端缓冲区。

  • Ctrl-w NCtrl-\ Ctrl-n将缓冲区置于终端正常模式:击键不转发到 shell,但 Vim 使用正常缓冲区(尽管 shell 作业仍在运行)。 然后,您可以使用gt更改选项卡,键入 Ex 命令,例如:ls等。要使终端缓冲区恢复活力, i , a , ...

  • 如果你要映射它,我推荐使用:tab ter++kill=hup ,这样当你:qa终端作业不会阻止 Vim 退出。 这是正常终端仿真器在关闭时发送给其工作的信号。

  • 对于终端模式映射,请使用tnoremap ,例如

    tnoremap <S-Tab> <CW>:tabprevious<CR> tnoremap <CN> <CW>N

有关:help :terminal:help :tab的更多信息。

2019 年,vim 现在有了终端模式。

:help terminal

例如,您可以像这样使用它。

# go to terminal-job mode
:terminal

# go to terminal-normal mode
ctrl-w N

# go back to terminal-job mode
i

Vim 8.1现在有一个内置终端,可以用 :term 命令打开。 这提供了与其他 Vim 功能更完整的集成。


原答案:

我建议查看tmuxscreen 我自己使用 tmux,并且与vim-tmux-navigator一起在终端和 vim 之间移动非常容易。

一种更像 vim 的方法是使用:make

:制作

  • :make将执行'makeprg' 它默认make哪个是 C 项目中的佼佼者
  • 运行:make后,quickfix 列表将包含任何错误。
  • 通过:compiler命令设置你的编译器。
  • 可以像这样传递额外的参数:make foo-command
  • 当前文件名可以用%表示。 例如:make %

快速修复列表

  • 使用:cnext:cprev在错误之间移动。
  • :copen在窗口中打开快速修复列表( :cclose关闭)
  • :cwindow仅在出现错误时打开快速修复列表窗口
  • 可能想为:cnext和朋友使用更好的映射。 我建议 Tim Pope 的unimpaired插件

替代品和插件

  • 只需使用<cz>暂停 vim 并运行您的构建系统。 (缺点:在快速修复列表中松散)
  • 使用:! 编译。 (与暂停相同的缺点)例如:!make
  • Syntastic是一个语法检查系统,可在保存时检查文件
  • Dispatch可用于在后台运行事物。 非常适合测试套件
  • 正如@brettanomyces 提到的,您可能需要考虑终端多路复用器,例如tmuxscreen
  • SingleComplile尝试使用:make完成一些工作

结论

如果您刚刚开始,我建议您学习如何使用:make和 quickfix 列表。 有一个很好的Vimcast插曲介绍了快速修复列表: 使用 :vimgrep 搜索多个文件 此外,Syntastic 是一种快速启动和运行 linter 的好方法。

除了关于标签

Vim 的选项卡与大多数文本编辑器选项卡不同。 它们更像是一组窗口/拆分的视口。 此外,Vim 以缓冲区为中心,而不是像大多数编辑器那样以选项卡为中心。 因此,在没有选项卡的情况下,使用 quickfix 列表之类的功能通常会更容易(如果必须使用选项卡,请参阅:h 'switchbuf )。 Vim 的选项卡经常妨碍使用拆分,因为有更好的窗口和缓冲区导航命令可用。 我个人打开了许多文件(有时超过 100 个),不使用选项卡,平均使用 1-2 次拆分,没有任何问题。 底线:学习有效地使用缓冲区

如需更多帮助,请参阅以下内容:

:h :make
:h 'makeprg
:h quickfix
:h :cnext
:h :cope

我特别在寻找这样的东西。

在选项卡中打开所有文件。 然后通过ctrl z切换到终端模式,播放所需内容,然后在终端中键入fg返回到选项卡模式。

对于使用NeoVim的任何人:

投票最高的答案使用:tab ter 这在 NeoVim 上不起作用(至少对我来说)。 但是,它仍然相当简单:

:tabe term://bash

tabe是打开etab并编辑文件。

term://是一种 NeoVim 打开终端的方式

bash是您想要使用的那种 shell(例如我使用 zsh,所以我的命令实际上是:tabe term://zsh

我创建的一些有用的命令:

" open terminal
if has('nvim')
    command Terminal vsplit term://zsh
    command TerminalTab tabe term://zsh
else
    command Terminal vert term
    command TerminalTab tab ter
endif

另一种方式

Ctrl-w:

这让我进入命令行,然后可以输入 tablast tabnext 或 tabprevious

或短版 tabl、tabn、tabp

或者这样:

Ctrl-w gt 和 Ctrl-w gT(下一个选项卡和上一个选项卡)

或 Ctrl-w Number gt(用于特定选项卡)

这也有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM