VIM。向终端发送命令?

时间:2012-11-22 02:28:40

标签: vim

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

2 个答案:

答案 0 :(得分:3)

别名在rc文件中定义,这些文件仅由交互式 shell提供,并且仅在交互模式下工作(vim 将所有内容传递给shell,它永远不会执行除了shell直接用fork + execve)。

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

set shellcmdflag=-ic

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

答案 1 :(得分: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是正确的。 :)我会在这里留下答案以获取其他信息。