Zsh 如何将所有选项卡完成添加到当前命令?

Zsh 如何将所有选项卡完成添加到当前命令?,zsh,Zsh,所以我键入了一个命令(pacman-S perl-),点击tab,看到有一大堆的完成(大约40个),我意识到我想要运行每一个完成(所以我不会意外地从CPAN安装已经是内置的) 如何运行命令的所有完成操作 额外好处:如何运行多个而不是所有的命令(不单独输入) 示例情况(实际情况): XXXXXXXXXXXXXX❯❯❯ pacman-S perl-⏎ --包裹-- perl-IPC-Run3 perl-ack perl-libwww perl归档Zip perl语言环境Gettext perl Au

所以我键入了一个命令(pacman-S perl-),点击tab,看到有一大堆的完成(大约40个),我意识到我想要运行每一个完成(所以我不会意外地从CPAN安装已经是内置的)

如何运行命令的所有完成操作

额外好处:如何运行多个而不是所有的命令(不单独输入)

示例情况(实际情况):

XXXXXXXXXXXXXX❯❯❯ pacman-S perl-⏎
--包裹--
perl-IPC-Run3
perl-ack perl-libwww
perl归档Zip perl语言环境Gettext
perl Authen SASL perl LWP媒体类型
perl基准计时器perl LWP协议https
perl捕获微型perl邮件工具
perl常识perl MIME工具
perl-Compress-Bzip2 perl-Mozilla CA
perl-Convert-BinHex-perl-Net-DNS
perl-Crypt-SSLeay-perl-Net-HTTP
perl DBI perl网络IP
perl摘要HMAC perl Net SMTP SSL
perl编码语言环境perl Net SSLeay
perl错误perl路径类
perl导出器Lite perl Probe perl
perl ExtUtils依赖于perl Regexp Common
perl ExtUtils PkgConfig perl-Socket6
perl文件复制递归perl Sys CPU
列出perl TermReadKey的perl文件
perl文件下一个perl测试盒
perl文件,其中包含perl测试脚本
perl Getopt表格perl时间日期
perl HTML解析器perl Try Tiny
perl HTML标记集perl URI
perl HTTP Cookies perl WWW RobotRules
perl HTTP守护进程perl XML LibXML
perl HTTP日期perl XML名称空间支持
perl HTTP消息perl XML解析器
perl HTTP协商perl XML SAX
perl IO HTML perl XML SAX库
perl-IO-Socket-INET6 perl XML Simple
perl IO套接字SSL perl YAML
perl IO stringy perl YAML Syck

我已经找到了解决问题的方法,它完成了工作,但这不是我想要的那种方法

我在屏幕上选择了完成文本(我正在使用mintty)并将其复制到我的编辑器中。然后我将其重新格式化如下:

perl perl-IPC-Run3 \
perl-ack perl-libwww \
perl-Archive-Zip perl-Locale-Gettext \
perl-Authen-SASL perl-LWP-MediaTypes \
perl-Benchmark-Timer perl-LWP-Protocol-https \
perl-Capture-Tiny perl-MailTools \
perl-common-sense perl-MIME-tools \
perl-Compress-Bzip2 perl-Mozilla-CA \
perl-Convert-BinHex perl-Net-DNS \
perl-Crypt-SSLeay perl-Net-HTTP \
perl-DBI perl-Net-IP \
perl-Digest-HMAC perl-Net-SMTP-SSL \
perl-Encode-Locale perl-Net-SSLeay \
perl-Error perl-Path-Class \
perl-Exporter-Lite perl-Probe-Perl \
perl-ExtUtils-Depends perl-Regexp-Common \
perl-ExtUtils-PkgConfig perl-Socket6 \
perl-File-Copy-Recursive perl-Sys-CPU \
perl-File-Listing perl-TermReadKey \
perl-File-Next perl-Test-Pod \
perl-File-Which perl-Test-Script \
perl-Getopt-Tabular perl-TimeDate \
perl-HTML-Parser perl-Try-Tiny \
perl-HTML-Tagset perl-URI \
perl-HTTP-Cookies perl-WWW-RobotRules \
perl-HTTP-Daemon perl-XML-LibXML \
perl-HTTP-Date perl-XML-NamespaceSupport \
perl-HTTP-Message perl-XML-Parser \
perl-HTTP-Negotiate perl-XML-SAX \
perl-IO-HTML perl-XML-SAX-Base \
perl-IO-Socket-INET6 perl-XML-Simple \
perl-IO-Socket-SSL perl-YAML \
perl-IO-stringy perl-YAML-Syck
并在
pacman-S
之后将其粘贴回我的终端

我说过这不是我想要的解决方案,所以我应该提到我正在寻找的解决方案


我正在寻找类似于pacman-S perl-*的东西,它看起来可能会整合所有的完成或其他东西(它不会)。

下面是我自己的解决方案

  • 为完成结果应用匹配
  • 将所有完成匹配项插入命令行
  • 要激活菜单选择并选择多个完成项

要对完成结果应用匹配,可以使用。
下面是一个示例
~/.zshrc

下面的
#与zsh默认效果相同
#zstyle':完成::'completer\u complete\u被忽略
zstyle':完成:::'completer\u complete\u match\u被忽略
#我不喜欢扩展或完成,所以我将其移动到
bindkey“^I”完整单词
bindkey“^X^I”展开或完成
现在,可以使用
*
s获得如下效果:

% ls m*e* ;# I have some local files that matches the glob.
main.epro    mem.c     mem.pro       modentry.c   module.o     modules.stamp
makepro.awk  mem.epro  mem.syms      module.c     module.pro
math.epro    mem.o     mkmakemod.sh  module.epro  module.syms

% git m*e*<Tab>
;# This prompts completions rather than expands the local files
;# like this:
% git merge
merge  -- join two or more development histories together
merge-base  -- find as good a common ancestor as possible for a merge
merge-file   -- run a three-way file merge
merge-index  -- run merge for files needing merging
merge-one-file  -- standard helper-program to use with git merge-index
merge-tree  -- show three-way merge without touching index
mergetool  -- run merge conflict resolution tools to resolve merge conflicts
mktree       -- build tree-object from git ls-tree formatted text
m*e*
键入Tab,然后Control-x、Control-a将完成匹配插入命令行。
例如:

% vim string.<Tab>
string.c     string.epro  string.syms
;# then hit <C-x><C-a>
% vim string.c string.epro string.syms
此activete菜单用于选择完成结果。在菜单选择激活期间,键入M-a(或Esc-a)将插入所选条目,并将“菜单光标”前进到下一个条目。
例如,会议:

% ls sig*
sigcount.h    signals.h    signals.syms   signames.o     signames1.awk
signals.c     signals.o    signames.c     signames.pro   signames2.awk
signals.epro  signals.pro  signames.epro  signames.syms

% vim sig<Tab> ;# this lists the matches
sigcount.h     signals.epro   signals.syms   signames.epro  signames1.awk
signals.c      signals.h      signames.c     signames.syms  signames2.awk

;# hitting <Tab> second time, the "menu cursor" appears and
;# the first entry will be activated
;# Note: "[[]]" denotes the "menu cursor" here
% vim sigcount.h
[[sigcount.h]] signals.epro   signals.syms   signames.epro  signames1.awk
signals.c      signals.h      signames.c     signames.syms  signames2.awk

;# then  hit <M-a>(Esc a)
;# "sigcount.h" is now in the command line and
;# the "menu cursor" points "signals.c" now.
% vim sigcout.h signals.c
sigcount.h     signals.epro   signals.syms   signames.epro  signames1.awk
[[signals.c]]  signals.h      signames.c     signames.syms  signames2.awk

;# then <Tab><Tab>
% vim sigcount.h signals.h
sigcount.h     signals.epro   signals.syms   signames.epro  signames1.awk
signals.c    [[signals.h]]    signames.c     signames.syms  signames2.awk
我不确定我的描述是否正确,所以这里是zsh文档中菜单选择的“交互模式”部分

六插入

这在正常和交互模式之间切换;在交互模式下,绑定到“自插入”和“自插入未数据”的键会像在正常编辑模式下一样插入命令行,但不会离开菜单选择;在每个字符完成后,再次尝试,列表更改为仅包含新的匹配项;completion小部件将最长的明确字符串插入到命令行中,undo和backward delete char返回到前一组匹配项

--


在处理相当大的命令行缓冲区方面也可以看到


现在在我的debian系统上,我可以得到以下效果:

# apt-get install perl-*<Tab><C-x><C-a><C-w>
;# ⇓
# apt-get install perl-base perl-byacc perl-cross-debian perl-debug perl-depends perl-doc perl-doc-html perl-modules perl-stacktrace perl-tk
#apt get install perl-*
;# ⇓
#apt get install perl base perl byacc perl cross debian perl debug perl dependens perl doc perl doc html perl模块perl stacktrace perl tk

在我的zsh配置中,我加载了zsh语法突出显示,如果在设置“所有匹配项”完成符后加载,则它似乎与所有匹配项冲突。
;# activate "menu selection" and hit <Esc><Esc>,
;# the "interacitve:" mode will be shown at this point.
% vim sig*
interactive: sig[]
[[sigcount.h]] signals.epro   signals.syms   signames.epro  signames1.awk
signals.c      signals.h      signames.c     signames.syms  signames2.awk

;# hitting "*awk" while interactive is activetad,
;# it colud limit the completion to "sig*awk"
% vim sig*awk
interactive: sig[]
[[signames1.awk]]signames2.awk
sig*awk
# apt-get install perl-*<Tab><C-x><C-a><C-w>
;# ⇓
# apt-get install perl-base perl-byacc perl-cross-debian perl-debug perl-depends perl-doc perl-doc-html perl-modules perl-stacktrace perl-tk