Questions tagged «zsh»

Zsh是具有许多高级命令行和脚本功能的shell。

1
zsh apt列表选项完成
我已经习惯了使用在bash tab完成获得apt list --upgradable通过打字apt ltab--utab,但我不能做的zsh同样的事情:--u没有扩展到--upgradable当我按下tab。 我用谷歌搜索了一些建议安装zsh-completions并将其添加setopt completealiases到的解决方案./zshrc,但是这些都没有帮助。 有什么方法可以使其像在bash中一样工作吗?
10 zsh  autocomplete 

1
使用`/ etc / paths`或`/ etc / paths.d`将项目添加到macOS Sierra中的PATH?
从我在各个地方进行的/usr/libexec/path_helper所有讨论中得出的结论来看,显然PATH在macOS Sierra 10.12中向环境变量添加项目的现代方法是: 编辑/etc/paths档案 添加要从/etc/paths.d目录读取的文件。 我的问题: 现代macOS上哪个更符合犹太标准? 如果更好或更常见的方式是将文件拖放到paths.d目录中,那么这些文件的名称和内容应该是什么?有什么例子吗? 我正在使用zsh而不是bash。这有什么区别吗? 这两个选项是macOS独有的吗?还是它们出现在BSD或其他类似Unix的系统中?
10 osx  zsh  path  etc 

1
在zsh vim模式下执行命令
在zsh中vim mode,我写点东西 foo foo bar bar 然后我Esc按一下进入正常模式并输入 : foo foo bar bar execute: _ 然后,我想我可以做到,我想搜索并替换bar为baz foo foo bar bar execute: s/bar/baz/g_ 然后,我尝试按Enter键,但这不起作用。我只能从execute使用Ctrl+返回c。 如何执行命令? 我以正常方式尝试了这一点,.zshrc没有任何尝试.zshrc。
10 vim  zsh 

1
括号扩展范围为什么使用两个点而不是三个点(省略号)?
我终于明白了/发现为什么我从来没有使用bash的(还有zsh的)括号扩展范围正确:语法是{1..10}什么,而不是我认为是一个省略号,即{1...10}。 我可以知道为什么选择两个点而不是三个点吗?如(Wikipedia)链接所示,省略号在计算机编程中的用法是常见且易于理解的,这就是为什么这引起了我的好奇心。

2
将zsh的制表符完成与大小写不敏感结合在一起
我将zsh 5.0.7配置为使用不区分大小写的制表符完成 zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 我遇到的问题是,这种不区分大小写的方法经常导致我需要Tab多花一些时间。例如,我的主目录包含文件夹“桌面”,“文档”和“下载”。如果我在主文件夹中并且输入 cd D 然后按Tab,我看到为我列出的三种可能性。另一方面,如果我输入 cd d 然后按,Tab然后将“ d”更改为“ D”,但我看不到完成菜单;我需要再按Tab一次,以使其发生。有没有办法在将“ d”更改为“ D”的同时获取完成菜单?
10 zsh  autocomplete 

3
在屏幕上完成单词的翻译,如VIM(Bash或Tmux)
如何配置Bash,Zsh或Tmux以完成屏幕上的最后一个匹配标识符?考虑以下常见情况: $ git fetch remote: Counting objects: 16, done. remote: Compressing objects: 100% (9/9), done. remote: Total 9 (delta 4), reused 0 (delta 0) Unpacking objects: 100% (9/9), done. From /opt/git/thunder * [new branch] issue540 -> origin/issue547314 e9204cf..4d42c3f v2.1 -> origin/v2.1 我如何才能issue547在CLI上轻松完成Bash / Zsh / Tmux ?当我Tab在$ git checkout isGit有用地完成后按下时issue,但我必须自己完成数字,因为所有先前的数字实际上都与现有的Git分支匹配。 …

3
从bash迁移到zsh的人应该面对的主要问题是什么?
有几次我在bash中遇到了其他使用zsh所没有的问题,他们为自己的聪明程度感到高兴。 另外,我在喜欢的人中看到了zsh用户,并且我半心半意地尝试了几次迁移到zsh,但是每次返回都是因为我没有时间(而且很懒惰)学习如何在zsh中进行日常工作。 zsh。 周围是否有良好的实用迁移工具?还是有一些重要的建议您建议我学习使过渡更容易,至少让我可以尝试一下,看看它对“对我来说”有什么不同? 顺便说一下,我将大部分时间都花在Mac,Ubuntu和RedHat变体上。
10 bash  zsh 

1
zsh-在<tab>上完全展开二进制路径
在我当前的zsh行为中,键入“ sudo”后单击tab只会添加一个空格。 $ sudo ... 我真正想要的是使选项卡完全扩展到在按下选项卡时将要执行的二进制文件的路径,从而使我能够看到将要运行的二进制文件: $ /usr/bin/sudo ... 目的是防止我的计算机上的本地用户被黑客入侵,将条目添加到我的$PATH变量中以及“ sudo”运行恶意程序的情况,这很容易升级为root。
10 zsh  path  autocomplete 

2
屏幕状态栏显示zsh / bash shell的当前目录
我使用zsh作为外壳的GNU屏幕很多。(我认为)能够将当前目录名称(而不是完整路径)显示为选项卡标题将是一个不错的功能。我可以做到这一点,CTRL+A SHIFT+A但这是手动的。我想在更改目录时更改它。 有人知道这样做的方法吗? 编辑:答案还具有针对bash的解决方案。
10 bash  zsh  gnu-screen 

1
包装包含另一个命令的单引号和双引号的命令
我最近了解了watch,但是在使其使用相对复杂的命令时遇到了麻烦。 例如,我想要求每三秒钟watch运行zsh一次以下命令*: for x in `command_1 | grep keyword | cut -d' ' -f1`; do command_2 "word[word=number]" $x; done 如您所见,以上行包括单引号,双引号以及其他特殊字符。 所以我尝试了: watch -n 3 "for x in `my_command | grep keyword | cut -d' ' -f1`; do command2 "rusage[mem=7000]" $x; done" 但后来我得到了: 在!@#$#....中找不到x的匹配项;做完了 我尝试了其他组合,但没有成功。这是这些尝试之一: watch -n 3 "for x in …
10 shell  zsh  quoting 

1
Zsh:使向上箭头跳过相同的命令
在大多数Unix Shell中,向上箭头↑键替换历史记录中上一个命令正在编辑的命令。使用命令可以查看历史记录history。 ↑ 可以多次按下以爬上历史记录。 我的问题是: 我如何配置我的外壳程序,以便↑跳过所有与当前命令相同的命令? 确实,我经常make连续输入很多。当我想再次输入(或稍作修改)一个较旧的命令时,我不得不打↑很多次才能跳过所有make命令。 我知道,这↑绝不是提高外壳生产率的唯一秘诀。 奖金: 提供适用于Bash shell的配置。 保留历史记录(知道您连续多次键入命令会很有用)

3
zsh中的按目录历史记录
zsh从现在开始我一直很高兴使用,并且我对我的历史记录设置非常满意,这些设置是: # Write to history immediately setopt inc_append_history # History shared among terminals setopt share_history # Save extended info in history setopt extended_history # Ignore duplicates setopt hist_ignoredups 但是经常发生的是,我需要在某些特定目录中使用特定命令。例如,当我在时,~/my_project我通常调用make target1 &amp;&amp; ./run1,但是当我在时,~/second_project我通常需要make target2 &amp;&amp; cat foobar | ./run2。 那就是:不同的目录,但是相似的命令。 因此,我通常会cd ~/my_project键入make并在历史记录中向后搜索,直到找到所需的内容为止。但是,如果碰巧我在其中工作过second_project,那么在搜索历史记录时,我会发现一些我不需要的命令。 因此,我的问题是:zsh是否存在插件/设置/功能,以便在历史记录中搜索时,首先显示在当前目录中调用的命令? 理想情况下,所有其他匹配历史记录命令都将出现在这些命令之后,可以选择指定优先级元素的最大数量。 我会尝试自己编写类似的内容,但是我仍然不知道如何编写自定义zsh插件,如何处理历史记录等等。

1
ZSH:`.`和`source`有什么区别?
我以前认为内置.和source是等效的。这个问题在谈到我时是同意的bash。但是我遇到以下使用zsh: desktop➜ ~/pst . env /usr/bin/env:1: no such file or directory: ^@^A^@^@^@X^Z@^@^@^@^@^@@^@^@^@^@^@^@^@\M-8q^@^@^@^@^@^@^@^@^@^@@^@8^@ /usr/bin/env:2: parse error near `)' desktop➜ ~/pst source env desktop➜ ~/pst file env env: ASCII text source达到了我的预期,但是.正在尝试做什么?
10 shell  zsh 

1
为什么我不能打印在env输出中看到的变量?
我对设置一个外壳实例与另一个外壳实例的环境变量感兴趣。所以我决定做一些研究。阅读了许多与此有关的问题后,我决定对其进行测试。 我生成了两个外壳A和B(PID 420),它们都在运行zsh。从外壳程序AI运行以下命令。 sudo gdb -p 420 (gdb) call setenv("FOO", "bar", 1) (gdb) detach 从外壳B运行时,env我可以看到变量FOO确实设置为bar值。这使我认为FOO已在shell B的环境中成功初始化。但是,如果我尝试打印FOO,则会出现一个空行,表明未设置FOO。对我来说,这里似乎有矛盾。 这已在我自己的Arch GNU / Linux系统和Ubuntu VM上进行了测试。我还在bash变量甚至未在env中显示的地方对此进行了测试。尽管这让我感到失望,但如果shell在生成时缓存其环境的副本并仅使用它(在链接的问题之一中建议),则是有意义的。这仍然不能回答为什么zsh可以看到变量。 为什么输出为echo $FOO空? 编辑 输入评论后,我决定进行更多测试。结果可以在下表中看到。第一列是FOO注入变量的外壳。第一行包含该命令的输出,可以在其下面看到。FOO使用:注入变量sudo gdb -p 420 -batch -ex 'call setenv("FOO", "bar", 1)'。zsh:专用的命令zsh -c '...'也已使用bash进行了测试。结果是相同的,为简洁起见,省略了它们的输出。 Arch GNU / Linux,zsh 5.3.1,bash 4.4.12(1) | | env | grep FOO | echo …

4
从右到左的外壳支架扩展
在zsh(和其他Shell)中,如果我包含类似的参数(例如): {a,b,c}{d,e,f} 大括号扩展将其变为: ad ae af bd be bf cd ce cf 就我的目的而言,参数顺序很重要,并且我需要大括号将其从右向左扩展,而不是从左向右扩展。也就是说,我希望扩展为: ad bd cd ae be ce af bf cf 有没有一种方法可以控制大括号的扩展顺序?我正在寻找在任何情况下都可以使用的东西,而不仅仅是这些论点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.