Nic*_*ich 4 linux bash zsh command-line tmux
我知道zsh 的preexec()挂钩以及在 bash 中可以实现的方式。(链接)
但是我可以在打字的同时获得当前输入吗?
这个问题背后的想法如下:
为了更快地学习命令、参数和快捷方式,我想在“数据库”中搜索正在键入的命令,提供“帮助/有用知识/快捷方式”提示,并在键入时使用 screen/tmux 在另一个会话中显示这些在另一个。
是否可以检查当前正在键入的命令?如果它对每次击键都不起作用,则计时器循环也可能起作用。
我只能回答zsh,可以做到这一点,是的。
首先,已经有一些用于增量完成的小部件。第一个显然是 Y. Fujii。虽然它的网站是日语的,但你不用说那种语言就可以很容易地弄清楚它是如何工作的以及如何使用它。 Auto-fu是原始脚本的扩展。
参考资料到此为止。在zsh所述的zsh线编辑器(zle)是负责交互使用命令行的。除了提供给小部件的许多其他变量(请参阅 参考资料man zshzle)之外,当您想要捕获当前命令行时,您会对这些变量感兴趣:
$BUFFER:编辑缓冲区的全部内容。
$LBUFFER:位于光标位置左侧的缓冲区部分。
$RBUFFER:位于光标位置右侧的缓冲区部分。
这些变量是可写的,什么会改变当前的命令行!
要捕获每个按键,您可以修改self-insert为每个按键执行(默认情况下)的小部件,除了LF或CR。这是一个示例,它没有任何用处,但是为每次击键附加一个点$RBUFFER- 只是为了说明这是如何工作的:
function self-insert() {
RBUFFER+="."
# execute some other command, but ensure they don't produce any output.
zle .self-insert
}
zle -N self-insert
Run Code Online (Sandbox Code Playgroud)
.self-insert 是内置小部件,因此我们不会遇到无限循环。
因此,您可以从头开始,也可以从 Fujii 的脚本开始并对其进行修改。后者的一个好处是,它还对删除我在这里忽略的击键进行了一些处理。
| 归档时间: |
|
| 查看次数: |
1672 次 |
| 最近记录: |