我正在尝试将vim配置为我的主要编码程序。我已经想过如何编译单个文件,但是当我从vim中执行程序时,我不断收到127错误代码。我在a
的框中有./a.out
别名,但是当我从vim发出命令:!a
时,它不起作用。 :!./a.out
。有谁知道这是为什么?
答案 0 :(得分:3)
别名在rc文件中定义,这些文件仅由交互式 shell提供,并且仅在交互模式下工作(vim 将所有内容传递给shell,它永远不会执行除了shell直接用fork + execve)。
默认情况下,从vim启动的shell以非交互模式启动,因此不会读取bashrc
并且没有定义别名(尽管它们已定义,但它们不会在非交互模式下使用)。你可以设置
set shellcmdflag=-ic
,然后shell将以交互模式启动,并且将读取带有别名的.bashrc
文件。
答案 1 :(得分: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是正确的。 :)我会在这里留下答案以获取其他信息。