【发布时间】:2011-02-08 19:51:02
【问题描述】:
假设我在bashrc 中定义了这些变量:
i='cgi-bin/internal';
e='cgi-bin/external';
f='cgi-bin/foo';
b='cgi-bin/bar';
ad='cgi-bin/admin';
#etc...
当我在命令行vim $i/edit_TAB 上使用变量时,它将扩展变量并且命令行上的输入变为vim /www/productX/subdomain_x/cgi-bin/internal/edit_(无论我在哪个站点上)和然后我 TABTAB 得到可能的完成。
没关系,功能不是问题。只是每次都看到完整路径而不仅仅是变量的值会很烦人。
有没有办法在不影响功能的情况下不扩展命令行上的 bash 变量?
是 bash 完成吗?
期望的结果是 $i 没有扩展到它的值(视觉上)或 $i 扩展到相对路径而不是完整路径。
【问题讨论】:
-
你什么时候看到这个?除非我执行
shell-expand-line(Ctrl-Alt-e) 或complete-variable(Alt-$),否则变量不会为我扩展。您的 Ctrl-i(或 Esc-Esc)绑定与默认绑定不同吗?bind -p|grep ' complete$'的结果是什么? -
ack,抱歉,我的
好像从原始帖子中删除了... -
bind -p|grep ' complete$'的结果是什么?如果$i包含“cgi-bin/internal/”,那么“/www/productX/subdomain_x/”从何而来? -
"\C-i": 完成 "\e\e": 完成当前工作目录类似于 "/www/productX/subdomain_x/"。因此,如果我要 vim 一个文件并使用
来完成文件名,它将扩展为“vim /www/productX/subdomain_x/cgi-bin/internal/edit_filename.cgi”,而不仅仅是“vim cgi-bin /internal/edit_filename.cgi" 正如我所料。 -
好的,您可以选择吊销我的执照或接受我的道歉。我完全忽略了变量后面有一个 slash 的事实。我很抱歉。我不认为有任何方法可以做你想做的事。最接近的方法是向
$COMP_WORDBREAKS添加一个斜杠,如下所示:COMP_WORDBREAKS=$COMP_WORDBREAKS/,这将阻止斜杠之前的变量被扩展,但它也不会使用它的值来完成。我查看了使用bind创建键盘宏,但如果有可能,它会非常复杂。对不起。
标签: bash variables expansion bash-completion