单列完成?

单列完成?

TL;DR:是否可以让 emacs 使用单列完成?


当使用 emacs 的完成机制并且有多种可能性时,完成将显示在单独的窗口中,例如

Possible completions are:
i                                  i-search
i1                                 i18n
i2                                 i3
iar                                ibm
ibm1047                            ibm1047-dos
ibm1047-mac                        ibm1047-unix
ibm437                             ibm437-dos
ibm437-mac                         ibm437-unix
ibm775                             ibm775-dos
ibm775-mac                         ibm775-unix
ibm850                             ibm850-dos
ibm850-mac                         ibm850-unix
ibm851                             ibm851-dos
ibm851-mac                         ibm851-unix
ibm852                             ibm852-dos
ibm852-mac                         ibm852-unix
ibm855                             ibm855-dos
ibm855-mac                         ibm855-unix
ibm857                             ibm857-dos

虽然这种格式对于少数项目来说完全没问题,但当列表很长且在同一行有连续的完成时,即按以下顺序排列

1    2
3    4
5    6

相当分散注意力。理想情况下,我更喜欢排序

1    4
2    5
3    6

但我担心这是不可能的,因为它无法处理比每列更宽的补全。在这种情况下,Emacs 使用格式

111  222
33333333
444  5555

它只因为“水平优先”排序而有效;另外我首选的排序需要根据窗口高度调整完成缓冲区的内容(同样不切实际)。

因此,作为替代方案,我希望完成仅使用一列,即

Possible completions are:
i                                  
i-search
i1                                 
i18n
i2                                 
i3
iar                                
ibm
ibm1047                            
ibm1047-dos
ibm1047-mac                        
ibm1047-unix
ibm437                             
ibm437-dos
ibm437-mac                         
ibm437-unix

我发现用视觉来扫描会更容易。

这可能吗?

答案1

也许你想改变completions-format

不过,它不会将输出限制为单个列。添加该功能completion--insert-strings(即在该缓冲区中插入完成的函数)很容易,因此也许您应该将其作为新功能请求。

答案2

如果你使用冰柱然后只需自定义用户选项icicle-Completions-max-columns到值1

如果你不想要单列总是,您可以更改*Completions*显示逐步地,改变候选之间的间距或要使用的列数。

答案3

相关内容