Vim 进程在执行外部命令后停止

Jef*_*rey 5 linux bash vim

我最近一直在使用 vim 用 C 编程。我已经创建了用于从 vim 内部编译和运行程序的快捷方式,但最近 vim 的进程在执行程序后一直停止。

foo.c:

#include <stdio.h>

int main() {
    printf("Hello World!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

.vimrc:

set shellcmdflag=-ic

syntax on

autocmd FileType c map <F6> :!gcc -o "%:p:r.out" "%:." <bar> more<CR>
autocmd FileType c map <F7> :!%:p:r.out<CR>
Run Code Online (Sandbox Code Playgroud)

如果我点击F6,程序编译正常。但是如果我点击F7,我会得到以下信息:

Hello World!
[1]+  Stopped                 vim test.c
Run Code Online (Sandbox Code Playgroud)

我可以fg用来启动该过程备份,但这样做有点烦人。有谁知道如何解决这一问题?

ric*_*ici 7

不要使用交互式 shell 来执行命令。(这是i-ic。)

默认的 shellcmdflag ( -c) 应该可以正常工作。

如果您指定-i是为了让 bash 读取您的.bashrc文件(这是启动交互式 shell 的副作用),那么您最好只告诉 bash 读取启动环境脚本。引用 bash 联机帮助页:

例如,当 bash 以非交互方式启动时,要运行一个 shell 脚本,它会BASH_ENV在环境中查找变量,如果它出现在那里,就展开它的值,并使用展开的值作为文件名来读取和执行。Bash 的行为就像执行了以下命令:

          if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
Run Code Online (Sandbox Code Playgroud)

PATH变量的值不用于搜索文件名。

您可以在 vim 中设置环境变量 :let