问题描述

项目开发过程中,每次编译都要输入一些参数,随着参数的增多,每次编译对开发人员可以说是个“噩梦”,

为了防止每次手动输入编译参数,我们将 Makefile 引入项目。这样可以极大提高开发效率。

之前编写 makefile 都再 IDE 下,编辑器都有特殊设定,编写完,直接 make 一般都不会出太大问题

今天遇到个问题,makefile 在 vim 下编辑后,报错

$ make
Makefile:3: *** missing separator.  Stop.

问题分析

提示缺少分隔符,代码很简单,所以应该是 makefile 格式问题导致的

.PHONY: all
all:
   echo "Hello"

问题原因

通过分析可以得出: 报错由于 tab 被转换成空格导致

默认情况下,vim 不会将 tab 转换为空格,只有在 home 目录设置了.vimrc.virc才会出现无法输入 tab 的情况

先问问chatGPT看看大佬怎么回答

Q:vim 无法插入tab

A:如果你在 Vim 中无法插入 Tab 字符,可能是因为 Vim 将 Tab 键视为命令键而不是文本键。

为了解决这个问题,可以执行以下步骤:

打开 Vim,并进入插入模式。

输入 :set list 命令,以显示非打印字符。

按下 Tab 键,此时应该会显示一个类似于 ^I 的字符。

输入 :set noexpandtab 命令,以关闭将 Tab 键转换为空格的选项。

按下 Tab 键,此时应该会插入一个 Tab 字符。

输入 :set expandtab 命令,以重新启用将 Tab 键转换为空格的选项。

通过以上操作,可实现在 Vim 中插入 Tab 字符。

解决方案

  1. 临时解决方案:

    • insert模式下,输入 ctrl+v, 再按 tab 完成一次 tab 输入,后续再输入需重复操作
    • 一般模式下输入:set noexpandtab,再进入insert mode 按 tab 输入即可,编辑完成可通过:set expandtab恢复 tab 转空格功能
  2. “永久”解决方案

    • 编辑 .vimrc 文件,删除 set expandtab

以上是本人踩坑经历,希望能帮助到大家