Makefile tcsh完成:后缀变量为=
我正在tcsh完成一项任务。生词的预期完成可能是make目标或变量 例如:Makefile tcsh完成:后缀变量为=,makefile,autocomplete,tcsh,tab-completion,Makefile,Autocomplete,Tcsh,Tab Completion,我正在tcsh完成一项任务。生词的预期完成可能是make目标或变量 例如: complete make 'n/*/(footarget1 bartarget2 FOOVAR1= BARVAR2=)/' 通过这种方式写入,在完成后会添加一个新的空格作为后缀,这在尝试设置VAR时是不方便的(必须删除空格) 如果我将后缀设置为null,则在完成目标时将不方便(应为下一个参数键入空格) 有没有一种方法可以在一个目标完成时为空格加后缀,而在变量完成时不加任何后缀?这很简单,只要所有目标都可以用大小写从变
complete make 'n/*/(footarget1 bartarget2 FOOVAR1= BARVAR2=)/'
通过这种方式写入,在完成后会添加一个新的空格作为后缀,这在尝试设置VAR时是不方便的(必须删除空格)
如果我将后缀设置为null,则在完成目标时将不方便(应为下一个参数键入空格)
有没有一种方法可以在一个目标完成时为空格加后缀,而在变量完成时不加任何后缀?这很简单,只要所有目标都可以用大小写从变量中分离出来
complete make \
'C@B*@(BARVAR2=)@@' \
'C@F*@(FOOVAR1=)@@' \
'C@V*@(VAR1= VAR2=)@@' \
'n@*@(target1 target2 VAR1 VAR2 BARVAR2 FOOVAR1)@'
对于完成,仅使用符合的第一条(从上到下读取)规则。如果以大写字母“
B
”开头,则第一条规则将命中,并完成BARVAR2=
,匹配后缀空间。如果以大写“
F
”开头,则类似地完成FOOVAR1=
。“
V
”有两个选项,用空格分隔。只需将新变量添加到起始字符的括号中,即可添加新变量。 如果需要其他起始字符,只需复制行
'C@B*@(BARVAR2=)@'\
并在新生成的行中将B*
替换为您的字符(例如g*
)
如果您的输入不是以这些大写字符开头,则最后一条规则适用于target1/target2。如果匹配可以在没有歧义的情况下完成,则这些将添加后缀空间 作为奖励,您还可以将这些作为第一条规则:
'c@B*=@(val1)@' \|
'c@F*=@(val2)@'
如果您当前的单词是BARVAR2=
,则此规则将为您提供val1
作为补全。对于
FOOVAR1=
它给出了val2
谢谢你的回答,但我解释得不够。并非所有变量都以VAR开头。我将示例中的变量从VAR1、VAR2更改为FOOVAR1、barvar2更新了答案,希望对您有所帮助。丑陋的部分仍然是很难让Makefile目标/变量自动进入完成。我还没有找到一种一致的方法(特别是因为目标中有%-通配符)