ksh自动完成和以前的命令在一起

时间:2011-12-30 19:17:50

标签: shell ksh

set -o vi-tabcomplete正在启用标签自动填充功能

set -o emacs正在打开历史记录(上一个命令,下一个命令下来)

但是,如果我在〜/ .kshrc中设置它们,它只打开一个emacs(历史记录),我无法启用标签自动完成功能。我错过了什么吗?

set -o vi-tabcomplete
set -o emacs

以下

set -o emacs

Esc, Ctrl V -- This gave me 
$ Version AJM 93t+ 2010-02-02

也尝试过做

$ set -o emacs
$ bind "^I=complete"
ksh: bind: not found [No such file or directory]

还将这些东西放在.kshrc

set -o emacs
bind "^I=complete"

现在,只有历史才有用,而不是标签完整。

5 个答案:

答案 0 :(得分:3)

选项vi和emacs是互斥的。

请检查您的ksh版本并更新您的问题:

set -o emacs 
Ctrl-V          # (yes, press control-v) this prints ksh version

尝试:

set -o emacs
bind "^I=complete"      # tab completion

我不记得的是你是否输入字母插入符号-I或控制-I来获得正确的绑定。

答案 1 :(得分:2)

在我的版本版本M-11/16 / 88f 中使用 ksh shell而不是ksh93我使用两次ESC键运行它。而不是使用标签的正常方式,然后是ESC键的两倍。但是行为不一样,更简单的是,在普通的shell sh或bash中,当你预先选择TAB键时,你会得到一个可能与你已经拥有的字符串匹配的列表。使用此shell并按两次ESC键,只有一个匹配的情况下,您将只获得自动完成功能。如果你想查看有多少个案你可以使用“ESC + =”组合然后继续写作。

恢复:

“ESC + ESC”=>只有匹配大小写时自动完成。

“ESC + =”=>显示所有匹配案例。

答案 2 :(得分:1)

这对我有用

输入〜/ .environ.ksh以下

set -o tabcomplete  # Auto Tab complete
set -o emacs        # History

答案 3 :(得分:0)

最后在.profile文件中添加以下两行来解决此问题:

SHELL=/bin/ksh # Correct it if your ksh is at different path
exec $SHELL    # To fix autocomplete bug of standard ksh. It must be last line.

答案 4 :(得分:0)

使用echo $ 0->检查外壳程序,如果这是ksh。 在.profile中输入以下内容:set -o vi

  1. 对于所有最后执行的命令,请使用关键字as:ESC + k(对于向后执行的最后一条命令)和ESC + j(向后执行的命令)
  2. 要自动完成路径,请将该命令用作ESC + \