所以我输入了一个命令(pacman -S perl-),然后我点击了tab,看到有一大堆完成(大约40个),我意识到我想运行每一个完成(所以我不要意外地从CPAN安装已经内置的东西。)
如何运行命令的所有完成?
BONUS:如何运行多个且少于所有命令(不单独输入)?
示例情况(实际情况):
XXXXXXXXXXXXXXXXX ❯❯❯ pacman -S perl-<Tab> ⏎
-- packages --
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
答案 0 :(得分:2)
这是我自己的解决方案,
要对完成结果应用匹配,可以使用_match
完成。
以下是~/.zshrc
示例:
# below is same as the zsh default effect
# zstyle ':completion:*::::' completer _complete _ignored
zstyle ':completion:*::::' completer _complete _match _ignored
# I don't like expand-or-complete to <Tab>, so I moved it to <C-x><Tab>
bindkey '^I' complete-word
bindkey '^X^I' expand-or-complete
现在,可以使用*
来获得这样的效果:
% 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*
要将所有compliteon匹配项插入命令行,云计算将使用all-matches
完成。如果您的~/.zshrc
:
zle -C all-matches complete-word _my_generic
zstyle ':completion:all-matches::::' completer _all_matches
zstyle ':completion:all-matches:*' old-matches only
_my_generic () {
local ZSH_TRACE_GENERIC_WIDGET= # works with "setopt nounset"
_generic "$@"
}
bindkey '^X^a' all-matches
输入 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
要激活菜单选择并选择多个完成,可以通过自定义menuselect
键盘映射来完成。
(From zhmodules(1)
22.7.3 Menu selection)
zstyle ':completion:*' menu select=0
zmodload zsh/complist
bindkey -M menuselect "^[a" accept-and-hold
bindkey -M menuselect '^[^[' vi-insert
此完成结果的activete菜单选择。在菜单选择激活期间,键入 M-a (或 Esc-a )会插入所选条目并前进&#34;菜单光标&#34;到下一个入口。
例如会话:
% 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
因此,您可以在完成结果中选择多个条目,以根据需要点击 M-a (或 Esc-a )。
以下段落也不错。
在这个示例配置中,点击 Esc Esc (我们在上面的片段中我们bindkey -M menuselect '^[^[' vi-insert
),当菜单选择处于活动状态时,它允许我们以交互方式限制完成结果基于输入模式。
;# 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
我不确定我的描述是否正确,所以这里是菜单选择&#34;交互模式&#34;的部分zsh文档。
VI-插入
这在正常模式和交互模式之间切换;在交互模式下,键入自动插入和自插入 - 取消符号的键插入命令行,如在正常编辑模式下,但不离开菜单选择;再次尝试每个字符完成后,列表将更改为仅包含新匹配;完成小部件使最长的明确字符串插入命令行,undo和backward-delete-char返回上一组匹配
同样可以看到edit-command-line
处理相当大的命令行缓冲区。
现在在我的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
答案 1 :(得分:0)
我找到了解决问题的方法,并完成了工作,但这不是我想要的那种解决方案。
我在屏幕上选择了完成文本(我使用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-*
这样的东西,看起来它可能会完成所有的完成或其他东西(它没有)。