所以我在 Vim 中使用了一段时间的命令是:
map <F10> :w<CR> :!clear; make %<<CR> :!./%<<CR>
它获取文件的当前名称,编译然后运行它。然而,这会污染我的目录,当我想将它们上传到 github 时,我必须在上传之前删除所有不带扩展名的文件。
我想做的是将它们全部编译成垃圾桶目录,所以我尝试将命令修改为以下内容:
map <F10> :w<CR> :!clear; make -C bin %<<CR> :!./bin/%<<CR>
我看到该-C
命令更改了目录,但这不起作用,因为我收到错误:
*** no rule to make target '17'. Stop.
我该怎么做才能使这个命令正常工作?
map <F10> :w<CR> :!clear; make -C bin %<<CR> :!./bin/%<<CR>
答案1
您将 Vim 的命令:make
与操作系统可执行文件混淆了make(1)
。当您make
在 Vim 的命令行中键入时,您正在运行 Vim 的:make
命令。这样做的效果之一是运行由 Vim 的 option 定义的操作系统命令makeprg
。
现在,makeprg
碰巧具有默认值make
,因此操作系统命令make(1)
也会运行。但 Vim 的命令:make
不接受选项,因此传递-C bin
Vim 的命令行并不意味着make -C bin
正在运行。如果您想更改运行的操作系统命令,您需要执行以下操作:
let &makeprg = 'make -C /path/to/bin'
然后在Vim中运行:make
就会运行OS命令make -C /path/to/bin
。
然而,正如评论中指出的,处理这个问题的更好方法是首先避免问题,并将所有不相关的文件添加到.gitignore
.否则,迟早您仍然会向 Git 存储库提交对象文件以及其他内容。