ZsMacConfig

Config Backup

life is an adventure
life is an adventure

Brew Tools Record Backup

鼠鬚管 Squirrel

中州韻輸入法引擎,是一個跨平臺的輸入法算法框架。基於這一框架,Rime 開發者與其他開源社區的參與者在 Windows、macOS、Linux、Android 等平臺上創造了不同的輸入法前端實現。

brew install --cask squirrel 安装鼠鬚管后的注意点与配置:

  • 切换 squirrel 输入法后才会生成 ~/Library 下的 Rime 文件夹
  • 在此目录下新增 default.custom.yamlsquirrel.custom.yaml
touch ~/Library/Rime/default.custom.yaml ~/Library/Rime/squirrel.custom.yaml
# default.custom.yaml
# 使用九个候选词,而非默认的五个候选词
patch:
  menu/page_size: 8
# squirrel.custom.yaml
# 候选词菜单横向排列,而非默认的纵向排列;
# apathy 配色方案需要花园明朝字体以显示生僻字,在 http://fonts.jp/hanazono/
# 下载 hanazono-20170904.zip,将字体放入 ~/Library/Fonts/ 下。
patch:
  style/horizontal: true
  style/color_scheme: zsxzy
  preset_color_schemes/zsxzy :
  #Rime theme
    name: zsxzy
    author: zsxzy
    back_color: '0x424242'
    text_color: '0xFFFFFF'
    hilited_text_color: '0xFEB406'
    hilited_back_color: '0xDD9650'
    hilited_candidate_text_color: '0x2B64FF'
    hilited_candidate_back_color: '0x000000'
    hilited_candidate_label_color: '0x2B64FF'
    hilited_comment_text_color: '0x2B64FF'
    candidate_text_color: '0xFFFFFF'
    label_color: '0xFFFFFF'
    comment_text_color: '0xFFFFFF'

  #   " style/color_scheme " : starcraft     #这项用于选中下面定义的新方案
  # " preset_color_schemes/starcraft " :   #在配色方案列表里加入标识为starcraft的新方案
  #   name :星际我争霸/StarCraft 
  #   author : Contralisk <contralisk@gmail.com>, original artwork by Blizzard Entertainment 
  #   text_color : 0xccaa88              #编码行文字颜色,24位色值,用十六进制书写方便些,顺序是蓝绿红0xBBGGRR 
  #   candidate_text_color : 0x30bb55    #候选项文字颜色,当与文字颜色不同时指定
  #   back_color : 0x000000              #底色
  #   border_color : 0x1010a0            #边框颜色,与底色相同则为无边框的效果
  #   hilited_text_color : 0xfecb96      #高亮文字,即与当前高亮候选对应的那部份输入码
  #   hilited_back_color : 0x000000      #设定高亮文字的底色,可起到凸显高亮部份的作用
  #   hilited_candidate_text_color : 0x60ffa8   #高亮候选项的文字颜色,要醒目!
  #   hilited_candidate_back_color : 0x000000   #高亮候选项的底色,若与背景色不同就会显出光棒
# 更改 user.yaml
var:
  last_build_time: 1625667403
  previously_selected_schema: luna_pinyin_simp
  schema_access_time:
    luna_pinyin: 1624705156
    luna_pinyin_fluency: 1624705052
    luna_pinyin_simp: 1624705159

Formulae 不完全指南

通过 smartmontools 进行硬盘写入查询的代码如下。

$ brew install smartmontools
$ smartctl -a disk0
$ brew uninstall smartmontools 

使用 libarchive 的开源 unar 支持广泛格式;unrar 不是免费软件,且只能处理 rar 格式。通过 unar 解压带有 rar 后缀文件的代码如下。

$ unar -help

包管理工具

npm & yarn

NPM CLI Commond Line Interface:与 GUI 图形化操作界面对立,仅通过键盘录入指令,不支持鼠标操作。

NPM 安装包到生产或开发环境:--save 或 --save-dev。

从 npm@5 开始,通过将完整性不匹配视为缓存未命中,缓存可以从损坏问题中自我修复,因此从缓存中提取的数据保证有效。删除缓存只会让包管理器运行效率降低,且不能纠正遇到的任何问题。

# 查看某个 package 的最新版本|在 npm 服务器上所有发布过的版本
$ npm view <packageName> version|versions # 具体版本
$ npm info <packageName> # 更加详细
# npm 查看本地安装的包版本号
$ npm ls <packageName> # 本地包
$ npm ls <packageName> -g # 全局安装包
# 查看本机 npm 缓存的位置
$ npm config get cache
# 清除 npm 缓存
$ npm cache clean -f

不将 node-modules 提交:安装包可能出现版本不兼容、补丁或次版缺陷的问题。

NPM5 引入的 package-lock.json:跟踪并固化安装包的确切版本。

package-lock.json 文件:integrity 校验软件包;resolved 指向包位置。

通过 package.json 的 semver 表示法设置要升级的版本:

  • 版本号严格按照 "主版本号.次版本号.修订号" 格式命名
  • 在版本改动较大且非稳定时,通常先发布一个先行版本
  • 内部版本 alpha、公测版本 beta、正式版的候选 rc Release candiate
a.b.c-beta.d # 先行版本号
~a.b.c # 取最新的 c 版本号 -> a、b 不变
^a.b.c # 取 b 和 c 最新版本号 -> a 不变
a.b.c # 始终使用确切的版本

自行发布包并在修改模块后需要更新发布的版本:

  • 升级修订版本号 => npm version patch
  • 升级次版本号 => npm version minor
  • 升级主版本号 => npm version major

NPM 从命令行、环境变量和 .npmrc 用户配置文件获取配置设置。

使用 npm config 相关命令可更新和编辑用户与全局 .npmrc 文件的内容。

# 查看路径
npm config get userconfig
# 显示当前仓库源
npm config get registry
# 设置国内镜像|官方镜像
npm config set registry=https://registry.npm.taobao.org|https://registry.npmjs.org

NPM 全局模块安装路径:通过 NVM 安装 Node 所带的 NPM。

全局安装:将 npm 包安装在对应 Node 目录下的 node_modules 文件夹中。

$ npm root -g # 打印全局的位置
/Users/xieziyi/.nvm/versions/node/v16.14.2/lib/node_modules

yarn 会缓存下载的包,并通过并行操作提高资源的利用率。

通过 Homebrew 安装的 yarn 位置:

  • x86 架构 => /usr/local/Cellar/yarn
  • arm64 架构 => /opt/homebrew/Cellar/yarn

指令查看 yarn 全局安装包目录位置(适用 x86 & arm64):

$ yarn global dir
/Users/xieziyi/.config/yarn/global

Bugs 解决

Fix the upstream dependency conflict, or retry this command with --force, or --legacy-peer-deps to accept an incorrect (and potentially broken) dependency resolution.

npm7- 遇到依赖冲突会忽视冲突,继续安装;npm7+ 需要手动处理。

$ npm i --legacy-peer-deps
$ npm i --force

iTerm2 Config

Install and Uninstall

brew install --cask iterm2 完成安装后可进行如下的基本配置:

  • 更改默认的黑白色调为彩色显示:iTerm2 -> Preferences -> Profiles -> Terminal -> Report Terminal Type -> xterm-256color
  • 更改颜色主题:iTerm2 -> Preferences -> Profiles -> Colors -> Color Presets -> Pastel(Dark Background)

Use oh-my-zsh

Oh My Zsh comes bundled with thousands of helpful functions, helpers, plugins, themes, and a few things that unleash your terminal like never before.

Oh My Zsh 是用于管理 Zsh 配置的开源社区框架。Zsh shell 既是一个 interactive shell,又是一个 scripting language interpreter。

Zsh is a powerful shell that operates as both an interactive shell and as a scripting language interpreter. While being compatible with the POSIX sh (not by default, only if issuing emulate sh), it offers advantages such as improved tab completion and globbing.

macOS 自带的 Zsh 位于 /bin/zsh,而使用 brew 安裝的 Zsh 根据架构的不同可能分别位于 /usr/local/bin/zsh/opt/homebrew/bin/zsh。需要获取当前 Zsh 的具体所属时可以使用 which zsh

Zsh 会在 shell 启动时有序地加载一系列的配置文件,细节点此

For mac users running ZSH, the ~/. zshrc file is evaluated every time a shell is launched. The ~/. zprofile file is only evaluated when you login to your mac user account. The .zprofile should be used for any commands and variables which need to be set once or which don't need to be updated frequently.

Order of reading startup files in zsh: .zshenv → .zprofile → .zshrc → .zlogin

Order of reading startup files in bash: /etc/profile → .bash_profile → .bash_login → .profile

all users user login shell interactive shell scripts Terminal.app
/etc/zshenv .zshenv
/etc/zprofile .zprofile x x
/etc/zshrc .zshrc x x
/etc/zlogin .zlogin x x
/etc/zlogout .zlogout x x

在执行安装脚本后会自动新建 ~/.oh-my-zsh 目录,原本存储在 ~/.zshrc 中的设置都会被统一的迁移到文件 .zshrc.pre-oh-my-zsh 中。

执行 brew uninstall --cask iterm2 不足以完全卸载 iTerm2 的历史残留。

iTerm2 settings storage location: Preferences, including profiles, are stored in ~/Library/Preferences/com.googlecode.iterm2.plist. To modify it, use the "defaults" command. FAQ SOF

defaults delete com.googlecode.iterm2

Use Powerlevel10k

Zsh 主题 Powerlevel10k 配合 Oh My Zsh 时需要注意存放位置的问题。Oh My Zsh 中第三方主题的存放路径是 ~/.oh-my-zsh/custom/themes 而非 Standard 主题目录 ~/.oh-my-zsh/themes

# 推荐
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

安装完成后要将 ZSH_THEME 的值设置为 "powerlevel10k/powerlevel10k"

此外也可以通过 Homebrew 来安装 Powerlevel10k,在 ARM 架构下的 $(brew --prefix) 值是 /opt/homebrew

配置向导 Configuration Wizard 启动时会先检测当前的设备是否有安装字体 Meslo Nerd Font,在设备未安装的情况下会进行安装询问。

On the first run, Powerlevel10k configuration wizard will ask you a few questions and configure your prompt. If it doesn't trigger automatically, type p10k configure. Configuration wizard creates ~/.p10k.zsh based on your preferences. 需要重新设置时也可以使用 p10k configure 命令。

Use Plugins

插件主推自动提示 zsh-autosuggestions 与语法高亮 zsh-syntax-highlighting

# zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

Oh My Zsh 插件同样也需要注意 Standard 与 Custom 存放目录的区别。安装完成后在 ~/.zshrc 中更新 plugins 的值。

Plugins plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

Operation Guide

在 iTerm2 中,可以使用以下命令进行分屏:

  • 垂直分屏:Cmd + D
  • 水平分屏:Cmd + Shift + D
  • 切换到上一个分屏:Cmd + Option + ←
  • 切换到下一个分屏:Cmd + Option + →
  • 关闭当前分屏:Cmd + W

上述这些快捷键可以在 iTerm2 的 Preferences 偏好设置中进行自定义配置。

在 iTerm2 中,使用 Cmd + T 可以打开一个新的标签页。不同标签页的切换可以使用以下快捷键:

  • Cmd + 数字:切换到对应标签页
  • Cmd + ←:切换到左边的标签页
  • Cmd + →:切换到右边的标签页
  • Cmd + Shift + ←:将当前标签页向左移动
  • Cmd + Shift + →:将当前标签页向右移动

iTerm2 Bug Fixes

issues-01 => 开启终端出现提示 "insecure directories"

zsh compinit: insecure directories, run compaudit for list. Ignore insecure directories and continue [y] or abort compinit [n]?

解决方式是通过列出不安全的目录后,将对应的目录赋与权限。

$ compaudit # 列出不安全目录
/usr/local/share/zsh
$ cd /usr/local/share/
$ sudo chmod -R 755 ./zsh # 对应的目录赋与权限

issues-02 => [WARNING]: Console output during zsh initialization detected

可于 p10k configure 或手动抑制此警告定义,需要在 ~./zshrc 中定义参数变量。

typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet
$ echo $POWERLEVEL9K_INSTANT_PROMPT

issues-03 => [oh-my-zsh] Can't update: not a git repository

# SOF STEPS
$ cd ~/.oh-my-zsh
$ git init # you've already done this step, so you can skip
$ git remote add origin https://github.com/robbyrussell/oh-my-zsh.git
$ git fetch
$ git reset --hard origin/master
# MY SOLUTION
$ cd ~/.oh-my-zsh
$ git init
$ sudo xcodebuild -license

issues-04 => One char gap between terminal edge and right prompt

Neovim

Env Config

经 Homebrew 下载的 Neovim 会额外安装如下的依赖:

  • x86 架构的安装目录:/usr/local/Cellar/
  • arm 架构的安装目录:/opt/homebrew/Cellar
Installing dependencies for neovim: unibilium, libtermkey, libvterm, luajit, luv, msgpack and tree-sitter

不同架构时,文件 ~/.zshrc 中 Neovim 的配置如下。

# x86
export PATH="/usr/local/opt/luajit-openresty/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/luajit-openresty/lib"
export CPPFLAGS="-I/usr/local/opt/luajit-openresty/include"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
export PATH="/usr/local/sbin:$PATH"
# arm64
export PATH="/opt/homebrew/Cellar/luajit//2.1.0-beta3-20230104.2/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/Cellar/luajit/2.1.0-beta3-20230104.2/lib"
export CPPFLAGS="-I/opt/homebrew/Cellar/luajit/2.1.0-beta3-20230104.2/include"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
export PATH="/usr/local/sbin:$PATH"

Bugs Handling

Mac Bugs

issues-01 => 打开 txt 文件出现中文乱码

进入 TextEdit 的 Preferences 面板,点击 Open and Save 页签,在 Plain Text File Encoding 内的 Opening files 选择 Chinese GB 18030,乱码问题即可解决。

issues-02 => 中文编码的 txt 文件打不开

"The document “.txt” could not be opened. Text encoding Chinese (GB 18030) isn’t applicable."

  • 对于内容较少的可以拖入浏览器,依靠其自动识别编码打开
  • iconv -c -f GB18030 -t UTF-8 [INPUTFILE...] >> [新文件名称]

issues-03 => 按键失灵

esc 失效,此时有外接键盘。失效应先进行键盘测试。重启服务即可。

issues-04 => Allow apps downloaded from

Gatekeeper 是 macOS 操作系统中的一项安全功能。它会强制执行代码签名并在下载的应用程序运行前进行验证,从而降低无意中执行恶意软件的可能性。

Allows all applications to be launched. This effectively turns Gatekeeper off.

This option can be re-enabled by using the 'sudo spctl --master-disable' command from the Terminal and authenticating with an admin password.

$ sudo spctl --master-disable
$ sudo spctl --global-disable # 新版本

issues-05 => screen recording no voice

可以参考此条 Youtube,下载 soundflower,但是通过 homebrew 不能成功安装。

Error: Failure while executing; `/usr/bin/sudo -E -- /usr/bin/env LOGNAME=xxx USER=xxx USERNAME=xxx /usr/sbin/installer -pkg /opt/homebrew/Caskroom/soundflower/2.0b2/Soundflower.pkg -target /` exited with 1. Here's the output:
installer: Package name is Soundflower
installer: Installing at base path /
installer: The install failed. (The Installer encountered an error that caused the installation to fail. Contact the software manufacturer for assistance. An error occurred while running scripts from the package “Soundflower.pkg”.)

issues-06 => Mac 外放没有声音

mbp 被迫喝咖啡后存在渗入腐蚀风险,在完成硬件清理后发现无法外放声音。

通过蓝牙连接以及 3.5mm 耳机测试还是存在声音,排除硬件模组受损。但是对于有线耳机会存在电流声,通过查阅相关的问题,主要可能是系统更新所导致。

=> 如果 Mac 內置喇叭無法正常運作
从 Apple 选单  中,选择「系统偏好设定」。按一下「声音」。按一下「输出」分页,然后选择内置喇叭。如果「输出」音量滑杆设定过低,请将滑杆向右移,然后再测试一次。如有勾选「静音」选框,请取消勾选,然后再测试一次。

issues-07 => Caps Lock 更改语言

  • System Preferences -> Keyboard -> 勾选 Use the Caps Lock key to switch to and from US. press and hold to enable typing in all uppercase.
  • System Preferences -> Keyboard -> Modifier Keys -> 有 Caps Lock 动作

issues-08 => 显示隐藏文件

  • 通知 finder 显示所有文件并重启 finder
defaults write com.apple.Finder AppleShowAllFiles true && killall Finder
  • 通知 finder 隐藏所有文件并重启 finder
defaults write com.apple.Finder AppleShowAllFiles false && killall Finder

Code Error

issues-01 => 进行 Homebrew 更新时,出现错误阻止了更新

shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory

getcwd 全称是 get current working directory。

出现此错误的原因通常是无法定位到当前的工作目录,即系统隐藏文件内概率不能定位路径操作。

Terminal Bugs

issues-01 => Set Terminal Title

2 ways for changing zsh auto titles to hide user and host:

  1. ~/.zshrc 中禁用自动生成 title,且 echo 指定标题 => 相关
  2. 未使用:改变 ZSH THEME 的 ZSH_THEME_TERM_TITLE_IDLE => 相关
DISABLE_AUTO_TITLE="true"
TERMINAL_TITLE="zairesinatra"
echo -n -e "\033];$TERMINAL_TITLE\007"

结束

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议,转载请注明出处!