2

我正在尝试将 vim 配置为我的主要编码程序。我已经想出了如何编译单个文件,但是当我从 vim 中执行程序时,我不断收到 127 错误代码。我a在我的盒子上别名为./a.out,但是当我从 vim 发出命令:!a时,它不起作用。:!./a.out做。有人知道为什么吗?

4

2 回答 2

3

别名在仅由交互式shell提供的 rc 文件中定义,并且仅在交互模式下工作(vim确实将所有内容传递给 shell,它从不直接使用 fork+execve 执行除了 shell 之外的任何内容)。

默认情况下,从 vim 启动的 shell 以非交互模式启动,因此bashrc不会读取,也没有定义别名(尽管即使定义了别名,它们也不会在非交互模式下使用)。你可以设置

set shellcmdflag=-ic

, 然后 shell 将以交互模式启动,并.bashrc读取带有您别名的文件。

于 2012-11-22T04:46:07.123 回答
2

别名是你的 shell 的一个特性(比如,bash)。!运算符直接执行一个文件——shell 永远不会看到它,也不能对其进行别名扩展。(编辑:见 ZyX)

如果您想让执行./a.out变得容易,您可以执行以下操作:

command XX !./a.out

然后你可以做:XX。或者,

nnoremap X :!./a.out<CR>

那么一个键X就足够了。

另一种选择(出于安全原因不赞成)是将当前目录添加到您的PATH

PATH="./$PATH"

这将允许您运行您的程序,a.out而不是./a.out. 如果然后使用(与语言相关的同构)-o开关编译程序,则可以将其命名为a

gcc -o a foo.c

鉴于此,!a将工作。使用风险自负。

编辑:ZyX 是正确的。:) 我将在此处留下答案以获取其他信息。

于 2012-11-22T02:31:16.933 回答