【问题标题】:Is there a way to make vim run the “make” command in another terminal window?有没有办法让 vim 在另一个终端窗口中运行“make”命令?
【发布时间】:2020-10-10 14:33:06
【问题描述】:

我主要使用 vim 作为 C/C++ 编程的编辑器。不幸的是,我对构建过程的工作方式不太满意。我知道可以输入(或映射到键):make 来运行 make 过程。不过,我不喜欢这个命令的工作方式,因为它在同一个终端窗口中运行构建过程而没有正确突出显示。因此,我通常在第二台显示器的另一个窗口中运行 make 命令,这样我既可以正确突出显示,又可以查看编译器在一个窗口中显示的构建错误,同时在我的主 vim 窗口中滚动源代码。这也很繁琐,因为它需要我将焦点转移到另一个窗口,然后输入 make 命令。

现在,我的问题如下:是否可以让 vim 在另一个窗口中运行 make 命令而无需更改焦点?这样,我可以将“在其他窗口中构建”命令映射到 vim 中的某个键,并且只需按一下键即可实现所有这些。

我的系统是 Manjaro Linux,i3 作为 DWM。

(我不确定是在unix论坛还是这里发布,如果发错论坛请见谅。)

【问题讨论】:

  • 这有帮助吗:vim.fandom.com/wiki/… ?
  • 您使用cmake 标签,但您的问题注释make 实用程序。那么,您实际询问的是哪个实用程序,CMake 还是 Make?它们是不同的东西。
  • 最糟糕的是,你可以在你的第二个窗口中运行一个 shell 脚本,在一个循环中,等待一些东西(试图读取命名管道(cf mkfifo)?)在运行你的彩色make 或其他之前,然后你只需在vim 中创建一个映射来触发它(例如写入管道)。
  • 从你的问题中看不出来,所以我会问:你知道:help quickfix吗?
  • 我在我的 BTW 插件中添加了对 coloured error messages 的强制支持——目前仅在 project 分支中。编译在 Vim 中完成(具有 :make 的异步风格),焦点不会转到 quickfix (vim) 窗口,并且解释 gcc 生成的转义码。需要安装三个插件。

标签: c++ c vim cmake terminal


【解决方案1】:

您可以通过使用 xdotool 和 i3 配置文件映射来实现此目的。这些映射要求在窗口右侧终端中执行的最后一个命令是make

set $prevR    xdotool key --clearmodifiers --delay 2 super+l ctrl+p Return super+h
set $prevRclr xdotool key --clearmodifiers --delay 2 super+l ctrl+l ctrl+p Return super+h

然后将这些命令映射到您的首选键,例如:

bindsym --release Mod4+Shift+e exec --no-startup-id $prevR 
bindsym --release Mod4+e       exec --no-startup-id $prevRclr 
   

第一个映射在当前窗口右侧运行上一个命令。 第二个在第一次清除终端时执行相同的操作。您需要将super+[lh] 替换为您自己的映射,以将焦点更改为您的备用监视器。 您可能还需要增加--delay 以适应更改窗口的延迟。

如果你还想填充 quickfix 列表,你必须在 vim 中单独运行 :make。通过这样做,您既可以在备用显示器上看到正确着色和格式化的错误,也可以使用:cnext:cprevious 跳转到 vim 中的下一个错误(有关更多信息,请参阅:help quickfix.txt)。

如果您想将 make 命令应用到任意窗口,请查看 手册页 xdotool(1) 的“WINDOW_STACK”部分。

【讨论】:

    猜你喜欢
    • 2013-03-10
    • 2011-12-16
    • 2016-01-29
    • 2014-03-22
    • 1970-01-01
    • 2015-12-02
    • 2021-05-06
    • 1970-01-01
    • 2013-03-01
    相关资源
    最近更新 更多