【问题标题】:tcsh auto-complete for the 2nd argumenttcsh 自动完成第二个参数
【发布时间】:2014-03-21 08:49:45
【问题描述】:

例如,对于命令

cp src_file dst_file

如果我输入 src 然后按 TAB,我的 tcsh 可以完成 src_file,但如果我输入 dst 然后按 TAB,它不会尝试完成 dst_file。

complete cp 的输出(根据@shx2 的请求):

% complete cp
complete cp 'c/--/(archive backup no-dereference force interactive link preserve parents sparse recursive symbolic-link suffix update verbose version-control one-file-system help version)/' 'c/-/(a b d f i l P p R r S s u V v x -)/' 'n/-*r/d/' 'n/{-S,--suffix}/x:<suffix>/' 'n/{-V,--version-control}/(t numbered nil existing never simple)/' 'n/-/f/' 'N/-/d/' 'p/1/f/' 'p/2/d/' 'n/*/f/' 

有没有我遗漏的设置?

【问题讨论】:

  • TAB 时会发生什么?如果您在输入 \cp 而不是 cp 时尝试相同的操作会发生什么?
  • 如果我在cp src_file 之后立即按TAB,则会显示目录中的内容。如果在cp src_file d 之后,则不显示任何内容。使用\cp 具有相同的结果。
  • alias cpcomplete cp 的输出是什么?
  • 输出如下图yorkwra:[trunk/3rdparty/arm_fastmodel]&gt;alias cp yorkwar:[trunk/3rdparty/arm_fastmodel]&gt;complete cp 'c/--/(archive backup no-dereference force interactive link preserve parents sparse recursive symbolic-link suffix update verbose version-control one-file-system help version)/' 'c/-/(a b d f i l P p R r S s u V v x -)/' 'n/-*r/d/' 'n/{-S,--suffix}/x:&lt;suffix&gt;/' 'n/{-V,--version-control}/(t numbered nil existing never simple)/' 'n/-/f/' 'N/-/d/' 'p/1/f/' 'p/2/d/' 'n/*/f/'

标签: autocomplete cygwin tcsh tab-completion


【解决方案1】:

尝试uncomplete cp 删除默认补全。如果你非常沮丧,你甚至可以uncomplete * :-)

完成的来源:tcsh 在登录过程中来源/etc/csh.cshrc,反过来,来源/etc/profile.d/complete.tcsh,在 cygwin 1.7 上的 tcsh 6.18.01 上是一个 1228 行的文件,其中包含很多自定义完成! cp 的补全不会自动补全第二个文件,而是强制您键入它以防万一您不小心匆忙覆盖了现有文件。

tcsh 自 1993 年以来就具有可编程补全,并具有用于定义补全的广泛语法。好处是你可以做类似的事情

complete dbx 'p/2/(core)/'

它为dbx 定义了位置2 的位置补全为单词“core”,这是位置2 中dbx 调试器最常见的补全,当您按TAB 时看到“core”出现在那里很酷。

不利的一面是,如果/etc/profile.d/complete.tcsh 没有达到您的预期,则需要学习完整的语法。到目前为止,我已经设法避免学习这种语法,因为 uncomplete 在这种情况下对我来说很好用。 YMMV。 :-)

【讨论】:

    【解决方案2】:

    您有一个针对 cp 的自定义 complete 规则,这会导致您报告为意外的行为。所以这可能是一个糟糕的规则。

    您可以简单地禁用它:

    uncomplete cp
    

    和/或从您的点文件中删除complete cp 命令(可能是.cshrc,或其中的另一个点文件sourced。

    【讨论】:

    • 我现在在 Windows 7 上重新安装了 64 位 cygwin。 cp 这里工作正常。不管怎么说,还是要谢谢你。顺便说一句:我的 shell 配置文件中没有任何 complete cp 命令。
    • @Yorkwar,根据您的评论,something 定义了 complete cp 命令 *somewhere。它有可能被“隐藏”为complete {cmd1,cmd2,cp,cmdx} ...
    • 我正在为我的新 64 位 Cygwin 使用相同的 .cshrc 副本。也许旧的 Cygwin 系统可以做到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2019-06-04
    • 2011-12-30
    • 2021-06-23
    相关资源
    最近更新 更多