问题标签 [zsh-zle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
321 浏览

zsh - 使用带有 zsh vi-mode 的 OS X 剪贴板

我目前正在使用带有 zsh 的 vi 模式。我也使用来获得视觉模式,因此我可以将其包含在正确的提示中。

我还不能让它与 OS X 剪贴板、pbcopy 和 pbpaste 一起使用。我真的很希望能够从可视模式或使用 yy 从正常模式中拉出并将内容粘贴到电子邮件或谷歌搜索中。

我该怎么做呢?

0 投票
1 回答
177 浏览

zsh - zle 后向字符未按预期工作

我正在编写一个简单的 ZLE 小部件来快速创建带有<C-j>. 这是我所拥有的:

但是,这似乎zle .backward-char不起作用。更令人困惑的是,如果我将脚本修改为:

我得到像)$(...的输出

似乎zle_subshell正在反向评估功能。ZLE 小部件是否有一些我不知道的明显问题?

0 投票
1 回答
262 浏览

linux - 创建自定义接受行以测量命令在 zsh 中运行所花费的时间

我想测量一个程序在 zsh 中运行所花费的时间。根据时差,我想打印出所花费的时间。我为此编辑了接受行挂钩函数:

但是,问题是“zle accept-line”似乎在后台运行。因此,我总是将 CMDRUNTIME 设为 0。是否有解决方法?

0 投票
2 回答
2897 浏览

widget - 小部件只能在 ZLE 处于活动状态时调用

我已经处理这个问题将近一个月了,我感到很沮丧,任何帮助将不胜感激。

我正在尝试为我的takenote命令编写一个小部件。小部件的目的是将文件~/notes夹中fzf的所有降价文件提供给用户,以便用户可以选择其中一个并开始编辑它。在用户键入takenote并按下后,<tab>我希望小部件能够运行。

这是_takenote.zsh小部件定义:

不幸的是,上面的代码不起作用,因为zle reset-prompt如果我删除它,结果将是这样的:

选择前

选择文件后,它会变成:

选择文件后

如您所见,这会破坏提示和命令本身。在我看来,我需要做的是zle reset-prompt 在调用之前做一个,compadd但这只有在我将函数绑定到一个键时才有效,否则,我将收到以下错误:

小部件只能在 ZLE 处于活动状态时调用

0 投票
1 回答
1793 浏览

zsh - zsh:运行 zle 小部件后的刷新提示

我定义了以下小部件

按下组合键后 cwd 已更改,但终端提示未更新。例如,在这样做之后 ()

终端保持不变。如果我然后输入ls -ld .,它会显示

这意味着cwd当时ll正在运行的已经是/.

这是非常混乱的,可能会导致严重的错误。(例如,如果按下后^R我被打断离开办公桌然后回来,我可能会忘记我做了什么)

按键后如何让终端重绘提示?有这样做的zle功能吗?

0 投票
0 回答
207 浏览

zsh - 如何在 ZSH 中将 xonsh 与编辑命令行一起使用?

我想在 ZSH 中打开一个编辑器缓冲区,edit-command-line并让 xonsh 执行缓冲区的内容。有可能干净地做到这一点吗?

edit-command-lineZSH 中的命令允许您使用编辑器编辑命令行,然后可以由 ZSH 解释器执行。它对于复杂的多行命令特别有用。

xonsh是一个使用 Python 作为脚本语言的 Python 驱动的 shell。在编写复杂的命令时,我更喜欢 Python 而不是 ZSH 语言。

额外的功劳:告诉编辑器使用 Python 语法高亮而不是 ZSH 会很好。

谢谢!

注意:我可以通过以下方式调用 xonsh ,但它很难看,语法高亮是错误的:

0 投票
1 回答
186 浏览

zsh - 在 vi 覆盖模式下使 zsh zle 恢复退格上的字符

我在 Vi 模式下使用 Zsh。


$KEYMAP == vicmd(即command-mode)时,我想按退格键将光标向左移动一个字符,而不删除任何内容。[在职的]

$KEYMAP == viins && $ZLE_STATE == *insert*(即insert-mode)时,我想按退格键将光标向左移动一个字符,删除该行上紧接的前一个字符。[在职的]

$KEYMAP == viins && $ZLE_STATE == *overwrite*(即覆盖模式/替换模式)时,我想按退格键将光标向左移动一个字符,将行上的前一个字符恢复为进入覆盖模式之前最初存在的字符. [不工作]


这是一个例子:


上面的例子显示了当我在覆盖模式下 按退格键时我想要发生的事情;但是,真正发生的情况如下:


请注意,在第二个示例中按下退格键时,不是恢复刚刚被覆盖的原始 3 个字符(即", w"),而是删除了替换这些字符的最后 3 个字符(即"uff"),以及光标右侧的字符被移到了左边。


如何获得我想要的行为?

0 投票
0 回答
191 浏览

zsh - ZSH 补全系统是否能够同时补全多个参数?

设想:

假设一个脚本my_online_searcher <query>打开一个带有搜索的浏览器query,其中query可以是多个单词。这个相同的脚本还提供了一个-s <query>显示搜索引擎建议的实用程序标志。例如:

期望的结果:

用户键入$ my_online_searcher lion rema[TAB],ZSH 完成菜单将给出上述选项。

尝试达到预期结果:

创建一个小完成脚本_my_online_searcher,它几乎调用了my_online_search -s <query>支持函数来给出选项。就像是:

这允许对空格进行转义,并允许 ZSH 将query视为单个参数。

但是,逐字完成不允许逐步完成建议。它要么重复前面的单词,要么过滤掉不以第一个参数开头的建议(例如$ my_online searcher lion rema[TAB]-> $ my_online_searcher lion remake lion king)。

一个想法是修改LBUFFER完成脚本的内部。事实证明这是不允许的,因为 ZSH 给出了LBUFFER只读错误

TL;博士:

是否可以让 ZSH 完成系统将命令后的所有参数视为可修改的参数?换句话说,我可以在 ZSH 中同时提议完成多个参数吗?

0 投票
1 回答
287 浏览

zsh - zle reset-prompt 不清理提示

我有一个键绑定到一个目录(非常有用):

它工作得很好,除了提示没有真正重置。

例如,从 Git 存储库 ( ~/.dotfiles) 开始:

在此处输入图像描述

之后C-M-u,我得到:

在此处输入图像描述

所以,我已经升级了(进入~),但Git 信息仍然存在,虽然不再有效——我不再在 Git 存储库中......</p>

如何解决这个问题?

0 投票
0 回答
134 浏览

zsh - 重置提示后,命令行自动跳转到下一行


①我尝试使用动态时钟,time refresh设置为~/.zshrc

②我完整修改的主题文件是bullet-train.zsh-theme 我的整个~/.zshrc文件是.zshrc


我的问题是:当我的终端进入 git 存储库时,

命令行会自动跳到下一行。

jump behavior这样的: 在此处输入图像描述

当我将 .git 的名称更改为 .git__xx 文件夹时。然后jump behavior停止

我发誓我没有按Enter,终端自动跳到下一行。我猜这是由 Anaconda 和其中的time refresh设置引起的~/.zshrc

现象记录在这里


我是不是Enter故意逼迫发这个问题来浪费别人的时间?

不,如果我按下Enter使命令行跳转到下一行,这就是效果

在此处输入图像描述


一些不恰当的解决方案:

删除主题文件中的 git 部分bullet-train.zsh-theme

然后现象消失,但该git display功能也被禁用。


你能告诉我如何解决这个错误吗?谢谢你的帮助。