【问题标题】:Zsh shell aliasZsh 外壳别名
【发布时间】:2021-01-05 13:37:09
【问题描述】:

我在 Mac OS 终端上使用 Zsh 作为我的默认 shell,并使用 .zshrc 文件来更新别名

我要更新的命令之一是cat。我想用语法高亮和行号打印命令的输出。 所以当我输入cat <filename>时,它应该别名为pygmentize -g <filename> | nl -b a

到目前为止我尝试过的不同方法, 方法#1: alias cat="pygmentize -g $1 | nl -b a"

这是立即打印带有行号的文件内容,但暂时不返回。因此,当我按下 Ctrl+C 时,出现以下错误。

  Traceback (most recent call last):
  File "/usr/local/bin/pygmentize", line 33, in <module>
    sys.exit(load_entry_point('Pygments==2.7.3', 'console_scripts', 'pygmentize')())
  File "/usr/local/Cellar/pygments/2.7.3/libexec/lib/python3.9/site-packages/pygments/cmdline.py", line 557, in main
    return main_inner(popts, args, usage)
  File "/usr/local/Cellar/pygments/2.7.3/libexec/lib/python3.9/site-packages/pygments/cmdline.py", line 408, in main_inner
    code = sys.stdin.buffer.read()  # use .buffer to get a binary stream
KeyboardInterrupt

方法#2: function cat() { pygmentize -g $1 | nl -b a }

相同的输出,当按下 Ctrl+C 时,堆栈跟踪与上面一样。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 我不会用执行完全不同的命令的命令来掩盖标准实用程序的名称。
  • 这个错误仅仅意味着pygmatize没有被写入干净地退出以响应中断信号;你可以忽略它。
  • 谢谢@chepner,是的,我可以忽略错误,但文件内容也没有被打印出来。
  • 你是如何使用这个功能的? pygmatize 试图从标准输入中读取的事实很奇怪。别名肯定是错误的,因为别名不带参数,但我希望该函数能够正常工作,例如 cat myfile.py
  • @BaranidharanS : 手动调用 pygmentize -g filename | nl -b a 会起作用吗?

标签: macos zsh alias oh-my-zsh zshrc


【解决方案1】:

删除“function”关键字,它应该可以正常工作:

cat() {
    pygmentize -g $1 | nl -b a
}

如果你想让它滚动得更好一点:

cat() {                      
    pygmentize -g $1 | nl -b a | less -Rai
}

我还建议将其命名为稍有不同的名称,例如 ccat,因为 cat 仍然很有用,您可以运行的任何脚本都可以轻松访问它。

【讨论】:

  • 感谢@maxxfrazer 的回复。我已经尝试过这种方法,但是在获取 .zshrc 文件时出现了一些错误。 $ source ~/.zshrc /Users/sbaranidharan/.zshrc:74: 根据别名 cat' /Users/sbaranidharan/.zshrc:74: 解析错误 ()' $
  • 解析错误意味着语法错误。您必须先解决此问题。
  • 当我删除这个函数时,.zshrc 获取成功。所以我以为我写错了函数。但不确定是什么问题
  • @BaranidharanS 在将其声明为函数之前,您显然已经将 cat 声明为别名。默认情况下,Zsh 不允许这样做。
  • 感谢@maxxfrazer 将名称从 cat 重命名为 ccat 成功了!
【解决方案2】:

错误KeyboardInterrupt 表示您退出了程序。但是,如果它有一段时间没有响应,您可以检查 Activity Monitor 以查看它是否正在运行/正在做什么。

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2019-11-19
    • 1970-01-01
    • 2016-10-21
    • 2011-06-11
    相关资源
    最近更新 更多