问题标签 [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.
zsh - 如果运行不同的小部件,有没有办法清除命令行下方的消息(zle -M "message")?
我有一个 zsh/zle 小部件,它通常/经常连续运行多次。我想使用显示一条消息,zle -M
但如果运行我以外的小部件,我想清除该消息。有没有办法做到这一点?
我已经翻阅了文档,但我没有看到一个钩子或其他任何东西来解决这个问题。我唯一想到的是将 bindkey 报告的每个键绑定替换为头部补丁包装器,然后在它被击中时恢复它们,但我认为这会导致查看 , 等的小部件出现$WIDGET
问题$LASTWIDGET
。
zsh - 如何正确绑定`` zsh 5.0.8 中的 zle vi 可视模式
<ESC>
zle vi-mode 在可视模式下的标准行为是什么都不做。但我希望<esc>
在 vi-mode 可视模式下按下的操作会将键盘映射切换到 vi-normal 模式(vicmd
)。就像在标准 vi 中一样。
我试过这个:
bindkey -M visual '\e' vi-cmd-mode
但它没有用。
这是我正在使用的 vi 模式配置文件
我怎样才能达到预期的行为?
zsh - 用于大小写操作的小部件:普通模式下的“gU”和可视模式下的“U”
我认为已经有一个小部件g~
操作的小部件。所以g~iw
会反转一个单词的大小写。
我阅读了 zshzle 手册,但没有找到可以给我行为的小部件gU
在 vim 中为我提供(大写操作)行为的小部件。
例如:对于单词“path_variable”,将光标放在v
,gUiW 会将世界更改为“PATH_VARIABLE”,依此类推。
小部件capitalize-word
似乎不是答案。我已经测试过了。
我还发现了关键U
视觉模式下的键不会大写视觉选择的文本/区域。我也没有在手册中找到可以为我提供所需行为的小部件。
这是编写自定义小部件的问题,还是必须在上游提交带有 c 代码更改的补丁?如何gU
在正常模式和U
可视模式下绑定以在 zle vi 模式下实现所需的行为?
shell - 异步 zle(zsh 行编辑器)
我已经修改了我的 zsh 以始终猜测/自动建议我尝试输入的内容,方法是通过修改self-insert
运行一个在运行 default 后guess
解释和修改的函数。$BUFFER
zle .self-insert
问题是这个guess
函数可能需要一段时间才能执行,这意味着粘贴一行输入需要一些时间(因为字符一个接一个地出现,每个字符之间可能有长达 1 秒的延迟),并且在慢速机器上延迟会即使在我输入命令时也会很明显。
我想做的是guess
在用户键入另一个键后立即终止此功能,因为guess
基于前一个键的原始键$BUFFER
无论如何都不再相关。这样,键盘输入不会被guess
函数阻止,并且只有在输入另一个键之前成功完成时,guess
函数才会更新。$BUFFER
关于如何做到这一点的任何建议都会非常有帮助。谢谢。
zsh - RPROMPT 未在初始提示中显示
尝试使用 RPROMPT 配置我的 zsh 提示时,我看到了一个奇怪的问题。我没有使用 oh-my-zsh 或任何其他插件管理器。这是我的.zshrc
文件:
但是,在第一个提示符下(打开新的 shell 或新的 tmux 窗口/窗格时),foo
不会显示。(然后我按回车键,RPROMPT 显示新提示。)
为什么第一个不显示?
zsh - 在 zsh 中恢复中断的命令
在 zsh 中,如果一个人不小心中断了一个命令 (^C),有没有一种快速的方法来恢复完全中断的命令行?
例如,
我想在光标位置恢复“这是一个长命令”。
zsh - zsh 清除上一行提示
我在 zsh 中有一个多行提示。我发现有时当我CTRL-C
退出自动完成时,提示的前一行会意外删除。这是一个 gif 显示这种情况发生在ls
,vim
和fzf
: http://imgur.com/1jTrrzA
以下是发生的事件的概要:
ls
所有文件ls
然后制表符完成并CTRL-C
退出第一个完成(前一行提示被删除)ls
然后 tab 完成并CTRL-C
退出第二个完成。提示的上一行不会被删除- 与第 2 步相同,但
vim
改为 - 与第 3 步相同,但我点击
Enter
而不是CTRL-C
,这是我的错误。但是,如果我CTRL-C
退出此示例(非第一次完成),则不会删除前一行 - 展示如何
fzf
多次遭受相同的问题
我发现在第 2 步和第 4 步中显示的问题在单行提示下仍然存在。但是fzf
,不会因单行提示而中断。
我的整个提示可以在http://pastebin.com/JwufRy6m找到,它是https://github.com/sorin-ionescu/prezto/blob/master/modules/prompt/functions/prompt_sorin_setup的修改版本我公司的 mercurial 存储库。我的提示文件中感兴趣的行(我认为)是 166 和 167(第 167 行 == 第 166 行减号$prompt_newline
)。
我尝试创建多行提示而不使用以下操作$prompt_newline
:
但这对我来说没有任何帮助,因为单行提示仍然存在部分问题。
command-prompt - 绘制 ZSH 提示时获取当前光标位置
我正在尝试从绘制 ZSH shell 提示符的函数中将当前光标位置(当前行号和列)读入变量中。我的目标是在提示下方显示内容,前提是有足够的空行不会导致额外的滚动。
在交互式 shell 中,我可以使用以下命令:
但是,如果我启动 cleanzsh -f
并将其放入呈现提示时执行的函数中,它将停止工作:
终端返回的 ANSI 转义序列被附加到当前命令(就像我在键盘上键入它一样),但不会被read -t 1 -s -d 'R' line
上面的命令吞噬。我怀疑 ZSH 在绘制提示时禁用了对 STDIN 的访问,但我不知道如何临时重新获得对它的访问(在绘制提示之前键入的正常键盘击键,或者在绘制提示的十分之一秒内不应该是截获),或如何使用 ZLE 访问该信息。
编辑:如果用户在显示提示之前已经键入了命令的开头,则不应丢弃该输入。到目前为止,我找到的解决方案(请参阅下面我自己的答案)不幸地读取并删除了这些字符。这令人沮丧,因为当我打开一个新的终端窗口并立即开始输入时,在提示出现之前输入的字符将被丢弃。