bash tab 补全报错 bash: syntax error near unexpected token `(‘

使用 vim 编辑文件时,敲下 vim xxx 后,再键入 tab 键报进行补全报错 bash: syntax error near unexpected token `('.

打开 bash 的命令执行详情

bash 复制代码
set -v

定位到具体的代码:

显然,代码位于 bash 补全的逻辑当中。

定位代码具体的文件和行号位置:

单独执行报错的代码

bash 复制代码
xspec=*.@([ao]|so|so.!(conf|*/*)|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)

报错 bash: !: event not found ,等等,原来是

bash 复制代码
!(conf|*/*)

这一部分被解析成了历史展开的事件指示器,可是明明是个 extglob 的结构。

查看 extglob 是否开启:

bash 复制代码
shopt -p | grep extglob

发现未开启,那么开启 extglob

bash 复制代码
shopt -s extglob

再次执行 vim xxx 然后 tab 补全,一切正常。

继续排查根源是 .bashrc 当中执行的某个初始化脚本当中,执行 `shopt -u extglob` 屏蔽了相关功能,调整过来即可。

相关推荐
LDR0065 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术5 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园5 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob5 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享5 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.5 天前
C语言--day30
c语言·开发语言
何以解忧,唯有..5 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽5 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下5 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗1115 天前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言