Mac上ZSH的使用小技巧


=Start=

缘由:

工欲善其事,必先利其器。在Mac上工作,和终端打交道比较多,出于效率和易用性考虑,使用的是iTerm2+ZSH的组合,能力和颜值都不错。在此基础上再配合一些自己的小技巧,效率又会蹭蹭蹭的提升。如果你也有一颗不断追求效率的内心的话,一起来试试吧。内容不定期更新。

正文:
问题1:如何在退出终端的时候不影响已有用「nohup + &」启动的后台进程?「zsh: you have running jobs.

解决方案:

$ disown %1  #具体的数值和后台进程号有关
#或
$ nohup ./my_script.sh &! #在以往的'&'后面多加了一个'!'
#或
$ nohup ./my_script.sh &| #在以往的'&'后面多加了一个'|'
#或
$ setopt NO_HUP
$ setopt NO_CHECK_JOBS

参考链接:

问题2:如何在ZSH中使用和Bash类似的快捷键功能?

将下面3行添加到 ~/.zshrc ,然后就可以在 Mac + iTerm2 + zsh 上使用之前在 Linux + Bash 上的组合快捷键了:

bindkey "[D" backward-word
bindkey "[C" forward-word
bindkey "≥" insert-last-word
  • option + ← #在原生的 iTerm-2 和 oh-my-zsh 上的作用为向终端发送 “[D” 字符,在终端上以单词为单位向左移动
  • option + → #在原生的 iTerm-2 和 oh-my-zsh 上的作用为向终端发送 “[C” 字符,在终端上以单词为单位向右移动
  • option + . #在原生的 iTerm-2 和 oh-my-zsh 上的作用为向终端发送 “≥” 字符,在终端上快速插入上个命令的最后一个参数

修改完后,如果需要在当前shell中立即生效,需要执行命令:

source ~/.zshrc

参考链接:

问题3:为 ZSH(oh-my-zsh) 添加命令的时间戳

参考解答:

$ vim ~/.oh-my-zsh/lib/history.zsh
将
alias history='fc -l 1'
修改成
alias history='fc -il 1'

$ source ~/.zshrc

参考链接:

问题4:为 ZSH(oh-my-zsh) 添加历史命令统计的function
function zsh_stats() {
  fc -l 1 | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl |  head -n20
}

参考链接:

=END=

, ,

《 “Mac上ZSH的使用小技巧” 》 有 13 条评论

  1. https://github.com/Bash-it/bash-it
    Bash-it是一个有社区支持的Bash框架(其实就是一堆Bash命令和脚本的集合),从oh-my-zsh获得灵感。
    虽然现在在Mac上都用的是zsh+oh-my-zsh的组合,但是到了线上服务器上,还是得习惯于用Bash,一般也用不到上面的Bash-it框架/集合,不过还是可以从该框架/集合中吸收一些比较有用的alias/custom functions/autocompletion,以此来不断补充自己的常用工具集。

  2. iterm2整合Tmux利器
    https://tried.cc/2017/12/18/Iterm2TmuxIntegration/
    `
    最实用且一定要掌握的快捷键:
    Command + T 新建Tab
    Command + W 关闭选中panes, tab, window
    Command + D 纵向分割选中的pane
    Command + Shift + D 横向分割选中的pane
    Command + Shift + Enter 最大化选中的pane,隐藏其它panes,再次按下就还原布局。
    Command + ; 提示输入过的命令
    Command + Shift + H 根据时间弹出历史记录
    `

  3. 打造Mac OS 最强终端利器 iTerm2
    https://www.studytime.xin/article/mac-os-iterm.html
    `
    1. iTerm2 安装
    2. oh-my-zsh
    3. 主题选择
    – 3.1. 将 zsh的主题更改为 Dracula
    4. 修改 iterm 配色为 Dracula
    5. 目录和文件名区分设置
    6. 快速跳转目录
    7. 命令设置别名
    8. 左右键跳转
    9. iTerm2 快速隐藏和显示
    10. 命令自动补齐插件 zsh-autosuggestions
    11. 增加指令高亮效果
    12. iTerm2 快速隐藏和显示窗体:
    13. iTerm2 配置代理
    14. 全局环境便利加载
    – 14.1. 将bash配置文件~/.bash_profile中的环境变量等配置复制到zsh配置文件~/.zshrc中
    – 14.2. 在zsh配置文件~/.zshrc中添加下面这行
    15. 快捷命令
    `

  4. 给 macOS 终端的 zsh 命令历史添加执行日期时间显示
    `
    # 临时查看,可以通过 -E 选项,默认是 European 格式的(dd.mm.yyyy hh:mm),不太符合我们自己的习惯
    $ history -E

    $ echo $HISTFILE
    $ tail $HISTFILE
    $ tail ~/.zsh_history

    # 可以通过修改 .zshrc 配置文件的方式来做,改动其中的 HIST_STAMPS 变量为合适自己的格式即可
    $ vim ~/.zshrc

    # Uncomment the following line if you want to change the command execution time
    # stamp shown in the history command output.
    # You can set one of the optional three formats:
    # “mm/dd/yyyy”|”dd.mm.yyyy”|”yyyy-mm-dd”
    # or set a custom format using the strftime function format specifications,
    # see ‘man strftime’ for details.
    # HIST_STAMPS=”mm/dd/yyyy”
    HIST_STAMPS=”%F %T”

    # 重新加载之后可以立即生效
    $ source ~/.zshrc
    `

    Linux Command History with date and time
    https://stackoverflow.com/questions/38526588/linux-command-history-with-date-and-time/63552102#63552102
    `
    In case you are using zsh you can use for example the -E or -i switch:
    $ history -E

    If you do a man zshoptions or man zshbuiltins you can find out more information about these switches as well as other info related to history
    `

  5. #MySQL-prompt
    export MYSQL_PS1=”\u@\h [\d]> ”

    mcd() { mkdir -p “$1”; cd “$1”; }
    mtoday() { mkdir -p “$HOME/logs/$(date +%Y_%B)/$(date +%Y-%m-%d)”; cd “$HOME/logs/$(date +%Y_%B)/$(date +%Y-%m-%d)”; }
    backup() { cp “$1″{,.bak}; }
    md5check() { md5sum “$1” | grep “$2”; }
    sha1check() { sha1sum “$1” | grep “$2”; }

    md5dir() {
    if [ -d “$1” ]; then
    path=$(readlink -f “$1”)
    save_name=$(date +%Y%m%d)$(echo “$path” | tr ‘/’ ‘_’)
    find “$path” -type f -print0 | xargs -0 md5sum > “$save_name”.md5
    else
    echo “‘$1’ is not a directory !!!”
    fi
    }

    #Python3 urldecode/urlencode
    alias urldecode=’python3 -c “import sys, urllib.parse; print(urllib.parse.unquote(sys.argv[1]))”‘
    alias urlencode=’python3 -c “import sys, urllib.parse; print(urllib.parse.quote(sys.argv[1]))”‘

    #rot13 encode
    alias rot13=”tr ‘a-zA-Z’ ‘n-za-mN-ZA-M’”

    alias genpasswd=”strings /dev/urandom | grep -o ‘[[:alnum:]]’ | head -n 30 | tr -d ‘\n’; echo”
    alias genpasswd2=”uuidgen”

  6. 手动将macOS上 iTerm2 的终端配色修改为 黑底绿字 的样式(白底黑字的样式太难看了,也看不清楚)
    `
    入口:菜单栏 -> Profiles -> Open Profiles -> Edit Profiles -> + 一个配置 -> 选择 Colors

    Basic Colors:
    Foreground – 字体的颜色
    Background – 背景的颜色
    `
    这篇 iTerm2 + Oh My Zsh 教程手把手让你成为这条街最靓的仔
    https://segmentfault.com/a/1190000022813972

    • 在修改成了黑底绿字之后,在终端上移动光标的时候可能发现颜色不明显的情况,影响操作,这个时候可以在Colors配置中修改:
      Cursor Colors -> Cursor【改成红色看起来效果不错】

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注