我正在尝试将 vim 配置为我的主要编码程序。我已经想出了如何编译单个文件,但是当我从 vim 中执行程序时,我不断收到 127 错误代码。我a
在我的盒子上别名为./a.out
,但是当我从 vim 发出命令:!a
时,它不起作用。:!./a.out
做。有人知道为什么吗?
问问题
198 次
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 的一个特性(比如,(编辑:见 ZyX)bash
)。!
运算符直接执行一个文件——shell 永远不会看到它,也不能对其进行别名扩展。
如果您想让执行./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 回答