vim 不能用 :! 执行 unix 命令 由于换壳

JQK*_*JQK 8 bash vim vimrc tcsh

我们公司使用red hat linux系统,在/home给大家分配一个账号。不幸的是,我们的系统正在使用 tsch,这对我不利。而且,由于我没有超级用户权限,我无法使用 chsh 命令为自己更改为 bash。更糟糕的是,我也无法使用 ypchsh。所以,最后,我将以下几行添加到 .cshrc 中:

    bash
    echo $0
Run Code Online (Sandbox Code Playgroud)

并适当配置 .bashrc(从原始 .cshrc 复制并修复必要的语法错误)。现在明显的 shell 变成了 bash(如“echo $0”命令所示)。

现在问题来了:

当我使用 vim 编辑一个 cpp 文件(例如 Hello_World),并在 vim 中使用“:!g++ -g Hello_World.cpp -o hw.out”编译文件时,不会显示任何结果,并且 vim 退出显示“bash”(当终端打开时),但没有通常的“敲击键”来回到我在 vim 中的工作。在 Hello_World.cpp 文件夹中,有一个 .Hello_World.cpp.swp 文件,但没有 hw.out。当再次vim Hello_World.cpp 时,发现这个cpp 文件已经打开了。

但是,如果我 g++ 文件夹中的 cpp 文件但不使用 vim 和 :!,则一切正常。实际上, :!现在似乎对 vim 来说是非法的。

如果我用原来的tcsh,一切也OK。

我该如何解决这个奇怪的错误?

提前感谢您的友好帮助。

顺便说一句:我更喜欢 bash 而不是 tcsh,主要是因为它具有 HISTIGNORE 和 HISTCONTROL 的便利性,尽管 tcsh 也有 histdup 设置。

我发现以下内容有点帮助,但仍然不能满足我的问题。

如何从 Vim 中运行 Unix 命令?

Jon*_*ler 8

把它放在你的 .login 脚本中:

setenv SHELL /bin/bash
exec bash -l
Run Code Online (Sandbox Code Playgroud)

第一行设置 SHELL 环境变量。第二行替换tcshwith bash,但告诉它作为登录 shell 运行(因此bash将处理您的.profile等)。您可以添加一个-i选项以使其具有交互性;应该没有必要。

  • 你也可以把 `set shell=/bin/bash` 放在 VIM 里面。这样,您可以保留 shell,但在 VIM 中使用 BASH 并避免`!` 问题。但是,我发现 OP 无论如何都更喜欢 bash,因此您的解决方案不仅可以解决 VIM 问题,还可以为 OP 提供首选的 shell。 (2认同)