Bash 跳过完成文本是如何工作的?

Bash 跳过完成文本是如何工作的?

更简洁的版本

"\t": menu-complete创建~/.inputrc这两个文件后,

$ touch one.two.txt
$ touch one.four.txt

开始写下面的内容,

$ ls one

击中Tab你会得到

$ ls one.four.txt

现在将光标移动到之前four,删除four,只写t,然后Tab再次点击。你会得到

$ ls one.two.txt.txt

有没有办法防止.txt此工作流程中的重复?

原问题

当我按下 时,我使用menu-completebash 函数循环完成Tab,我对此很满意。但以下的情况却经常发生在我身上。

longparthardtoremember.with.QQQQQQQ.extension假设我正在包含这些文件的目录中查找该文件

longparthardtoremember.with.AAAAAAA.nice.long.extension
longparthardtoremember.with.BBBBBBB.very.nice.long.extension
...

如果我Tab完成,$ long第一个文件名将被插入。此时,我想移动到文件名的中间,删除该AAAAAAA部分,键入B,然后Tab再次 -complete 。如果我这样做,后面的所有部分BBBBBBB也会被插入,从而导致它的重复,这显然是我不想要的。

vi编辑模式下,我可以很快地处理这个问题(我很快移动到重复的部分并将其删除),但它仍然很烦人。

纯属偶然,我skip-completed-text在 bash 的手册页中找到了 bash 选项。这不是我需要的吗?我已经设置了它on,但我看不出工作完成中的行为有任何差异Tab。我是否误解了手册页?

答案1

skip-completed-text这样工作(用你的例子touch one.four.txt):

$ ls one.four
#        ^ cursor is on the f

如果你按 Tab 键,skip-completed-text on它将完成

$ ls one.four.txt

如果你按 Tab 键,skip-completed-text off它将完成

$ ls one.four.txtour

所以这个设置在你编辑中间补全的时候并没有什么帮助。

答案2

代替

现在将光标移动到之前four,删除four,只写t,然后Tab再次点击。

将光标移动到之前four,只写t,然后点击TabCtrlk默认从光标删除直到结束)

相关内容