如何在 Mac 中将别名绑定到键盘快捷键?

如何在 Mac 中将别名绑定到键盘快捷键?

我经常在 Windows 和 Mac 之间切换。在 Windows 上,我可以使用 cls 清除屏幕,在 Mac 上,我可以使用 command+k 执行相同的操作。我一直在尝试找到一种将 cls 绑定到 command+k 的方法。这样当我在控制台中输入 cls 时,它会清除屏幕。我用的是zsh。

答案1

我假设您正在谈论终端会话。该程序clear将清除屏幕。您可以cls通过执行将其绑定到

alias cls=clear

将此行放入 $HOME/.profile 中以在新终端中执行

答案2

有一个 zle(zsh 行编辑器)小部件,用于清除屏幕并重新显示提示和编辑缓冲区:clear-screen。默认情况下,它在和模式下都绑定到Ctrl+ ,例如在或中,但您可以使用以下方法将其绑定到其他键:Lemacsvitcshbash

bindkey '^K' clear-screen

(在emacs模式下,Ctrl+K是删除从光标到行尾的键,这是我自己经常使用的键绑定)

如果您想clear-screen手动实现小部件,以便它调用clear命令然后重新显示提示,您可以创建一个自定义小部件,例如:

myclear-screen() {
  clear
  zle redisplay
}
zle -N myclear-screen

你可以用同样的方式绑定Ctrl+ 。Kbindkey '^K' myclear-screen

clsclear命令(清除屏幕的命令)创建别名,您需要执行以下操作:

alias cls=clear

或者您可以定义一个cls调用clear命令的函数:

cls() clear

或者:

cls() clear "$@"

对于在调用它时传递给的参数cls按原样传递给clear.

然后,您也可以使用 使其成为一个 zle 小部件zle -N cls,并将其绑定到一个键,但请注意,如果您调用它,屏幕将被清除,但您的提示和编辑缓冲区不会像小clear-screen部件那样自动重新显示。

clearin 的一些内置替代品zsh是:

  • echoti clear(来自zsh/terminfo模块,一般默认加载)。

  • echotc cl(在zsh/termcap模块中,与 tcsh 中的命令相同,tc 代表 termcap,而 ti 代表 terminfo,是一个稍微更现代的终端功能数据库)。

  • printf %s $terminfo[clear]其中$terminfo, 也是zsh/terminfo一个关联数组,它将 terminfo 终端功能名称(例如clear)映射到由 标识的终端的相应转义序列$TERM

  • printf %s $termcap[cl]: termcap 等效项。

  • 对序列进行硬编码:在大多数“现代”终端上,清除屏幕并将光标移至顶部的转义序列是\e[H(将光标移至顶部H),然后是\e[J(清除光标下方)。\e[2J会清除整个屏幕而不移动光标,\e[3J有些会清除滚动缓冲区。所以:

    printf '\e[H\e[J\e[3J'
    

    会清除一切。

相关内容