Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile tcsh完成:后缀变量为=_Makefile_Autocomplete_Tcsh_Tab Completion - Fatal编程技术网

Makefile tcsh完成:后缀变量为=

Makefile tcsh完成:后缀变量为=,makefile,autocomplete,tcsh,tab-completion,Makefile,Autocomplete,Tcsh,Tab Completion,我正在tcsh完成一项任务。生词的预期完成可能是make目标或变量 例如: complete make 'n/*/(footarget1 bartarget2 FOOVAR1= BARVAR2=)/' 通过这种方式写入,在完成后会添加一个新的空格作为后缀,这在尝试设置VAR时是不方便的(必须删除空格) 如果我将后缀设置为null,则在完成目标时将不方便(应为下一个参数键入空格) 有没有一种方法可以在一个目标完成时为空格加后缀,而在变量完成时不加任何后缀?这很简单,只要所有目标都可以用大小写从变

我正在tcsh完成一项任务。生词的预期完成可能是make目标或变量

例如:

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目标/变量自动进入完成。我还没有找到一种一致的方法(特别是因为目标中有%-通配符)