个人的Mac环境,主要是解决一些更换电脑时需要重新搞一些东西,以及分享一下个人mac的配置,以及一些命令的推荐!
安装常用命令 1 2 3 4 5 6 7 8 9 10 11 # 安装 brew (仅mac) sh -c "$(curl -fsSL https://anthony-wangpan.oss-accelerate.aliyuncs.com/software/2021/6-17/brew.sh)" # 安装zsh, 可以先检查下有没有 zsh --version ,mac默认是自带的 zsh --version # https://github.com/ohmyzsh/ohmyzsh sodu apt-get install zsh # 安装on-myzsh sh -c "$(curl -fsSL https://anthony-wangpan.oss-accelerate.aliyuncs.com/software/2021/6-17/zsh.sh)" # 设置默认 chsh -s $(which zsh)
解决brew Updating 慢的问题 我们是国内用户,在没有好的VPN的情况下,访问外网那真的叫做一个糟心!幸好有阿里巴巴这种公司做镜像!
参考自: https://blog.csdn.net/weixin_43318367/article/details/111411462
1 2 3 4 5 6 7 8 9 10 11 # 1. 替换 brew.git 仓库地址 cd "$(brew --repo)" git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git # 2. 替换 homebrew-core.git 仓库地址 cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core" git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git # 3. 替换 homebrew-bottles 访问地址 echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.zshrc source ~/.zshrc
on-my-zsh 插件 zsh-autosuggestions 命令记录/推荐
1 2 3 4 5 6 7 8 # 1. 下载插件 git clone --depth 1 https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions # 2. 配置插件 vim ~/.zshrc plugins=( git zsh-autosuggestions )
zsh-syntax-highlighting 高亮1 git clone --depth 1 https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting
https://github.com/zsh-users/zsh-autosuggestions/issues/238 解析 ctrl c+v 墨迹的问题,放到 ~/.zshrc
里面就行1 2 3 4 5 6 7 8 9 10 11 12 # This speeds up pasting w/ autosuggest # https://github.com/zsh-users/zsh-autosuggestions/issues/238 pasteinit() { OLD_SELF_INSERT=${${(s.:.)widgets[self-insert]}[2,3]} zle -N self-insert url-quote-magic # I wonder if you'd need `.url-quote-magic`? } pastefinish() { zle -N self-insert $OLD_SELF_INSERT } zstyle :bracketed-paste-magic paste-init pasteinit zstyle :bracketed-paste-magic paste-finish pastefinish
关于 agnoster 乱码问题: 自行百度解决,解决方案都不太好,建议别用,默认挺好! 安装GNU命令行 (仅Mac) 主要是解决,我们Linux用户的痛点,发现很多命令macos使用方式不一样!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 备份下 cp ~/.zshrc ~/.zshrc_copy # install grep sed awk gtar brew install grep brew install gnu-sed brew install gawk brew install gnu-tar # install coreutils, eg: ls,cd ,nc, ... brew install coreutils # install find utils, eg: find, xargs .. brew install findutils # install mysql-client brew install mysql-client
环境变量配置:
1 2 3 4 5 6 7 8 9 10 11 12 # alias alias awk=gawk # export gnu bin export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH" export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH" export PATH="/usr/local/opt/grep/libexec/gnubin:$PATH" export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" export PATH="/usr/local/opt/findutils/libexec/gnubin:$PATH" # export software export PATH="/usr/local/opt/mysql-client/bin:$PATH"
系统工具安装 brew install htop
安装语言环境 安装GO语言,文档: gvm 1 2 3 4 5 6 7 8 9 10 11 # bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) # source ${HOME}/.gvm/scripts/gvm export GOPATH=$HOME/go # gvm install go1.17 # gvm use go1.17 --default
安装openjdk 安装其他语言 1 2 # 配置python 使用 python3 alias python=python3
安装vscode 一定要配置这个,可以做到 anywhere code xxxx
!!!
ls 高亮 alias 下 alias ls='ls -F --show-control-chars --color=auto'
个人高频脚本 数据同步文件脚本 这个脚本主要是本地和远程双向同步,远程开发的话直接用 remote-ssh 或者 cloud-ide 即可!
记得在 ${SYNC_HOME}/.fileignore
创建文件,主要是申明一些不需要同步的文件目录和文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 *.swp *.pyc *.pyo .git .DS_Store .idea .vscode-upload.json output *.class *.log* mvnw* target *.iml .m2 bin node_modules cmake-build-debug cmake-build-debug-event-trace
在${SYNC_HOME}/sync.sh
创建文件,并且copy下面文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 # !/bin/bash set -e # # 远程服务器的用户名称 readonly DEV_USER="xxx.xxx" # 远程服务器的地址 readonly DEV_IP="10.xx.xx.xx" # 远程同步目录,推荐用户的根目录,例如可以执行 echo "$HOME " 查看用户根目录 readonly REMOTE_HOME="/home/xxx.xxx" # 本地脚本目录 readonly SYNC_HOME="/Users/xxx/go/bin/sync-devbox" # 本地同步白名单 readonly WHITE_LIST=("/Users/xxx/go/src" "/Users/xxx/data" "/Users/xxx/note") # LOCAL_HOME="$HOME" function usage() { echo "Usage: $(basename "$0") [dir]" echo "" echo " Support reverse synchronization, support forward synchronization" } # 获取远程文件的文件类型 function get_remote_file_type () { local FILE="$1" FILE_TYPE="" if ssh ${DEV_USER}@${DEV_IP} [ -d "$FILE" ] ; then FILE_TYPE="dir" elif ssh ${DEV_USER}@${DEV_IP} [ -f "$FILE" ] ; then FILE_TYPE="file" else echo "> [ERROR] the remote file or directory does not exist: $FILE" >&2 return 1 fi echo "$FILE_TYPE" } # 获取本地文件的文件类型 function get_file_type() { local FILE="$1" FILE_TYPE="" if [ -d "${FILE}" ]; then FILE_TYPE="dir" elif [ -f "${FILE}" ]; then FILE_TYPE="file" else echo "> [ERROR] the file or directory does not exist: ${FILE}" >&2 return 1 fi echo "${FILE_TYPE}" } # 检测是否允许传输 function is_white_list_file() { local FILE="$1" NOT_PASS_DIR=() for elem in "${WHITE_LIST[@]}"; do if [[ "${FILE}" == ${elem}/* ]]; then break fi NOT_PASS_DIR+=("$elem") done if [ ${#WHITE_LIST[@]} -eq ${#NOT_PASS_DIR[@]} ]; then echo "> [ERROR] the current directory ${FILE} is not under the whitelist: ${NOT_PASS_DIR[*]}" >&2 return 1 fi } # 正向同步 local ->remote function file_rsync() { FILE=$(realpath "$1") FILE_TYPE=$(get_file_type "$FILE") echo "> file: $FILE" echo "> file type: ${FILE_TYPE}" # 目录同步整个目录,文件同步单个文件 is_white_list_file "$FILE" REMOTE_FILE=${FILE/${LOCAL_HOME}/${REMOTE_HOME}} ssh ${DEV_USER}@${DEV_IP} mkdir -p "$(dirname "$REMOTE_FILE")" echo "> mkdir -p $(dirname "$REMOTE_FILE")" # 这里选择下文件目录 IGNORE_FILE=${SYNC_HOME}/.fileignore if [ "$FILE_TYPE" = "dir" ] && [ -f "${FILE}/.fileignore" ]; then IGNORE_FILE="${FILE}/.fileignore" fi # 如果同步的是文件,则忽略排除文件 rsync_opt=() if [ "$FILE_TYPE" = "dir" ] && [ -f "${IGNORE_FILE}" ]; then rsync_opt+=(--exclude-from="${IGNORE_FILE}") fi # 目录需要特殊处理下 if [ "$FILE_TYPE" = "dir" ]; then FILE="$FILE/" REMOTE_FILE="$REMOTE_FILE/" fi # 用法参考: https://www.ruanyifeng.com/blog/2020/08/rsync.html set -x rsync -avz \ --delete \ --progress \ --log-file="${SYNC_HOME}/sync-devbox.log" \ --log-file-format="%t %f %b" \ "${rsync_opt[@]}" \ "${FILE}" "${DEV_USER}@${DEV_IP}:${REMOTE_FILE}" set +x echo "> rsync ${FILE} -> ${REMOTE_FILE} success!" } # 反向同步 remote->local function file_reverse_rsync() { FILE="$1" echo "> remote file: $FILE" LOCAL_FILE=${FILE/${REMOTE_HOME}/${LOCAL_HOME}} echo "> local file: $LOCAL_FILE" is_white_list_file "$LOCAL_FILE" FILE_TYPE=$(get_remote_file_type "$FILE") echo "> remote file type: $FILE_TYPE" # 如果允许反向同步目录,那么注释掉下面这行代码 if [ "$FILE_TYPE" = "dir" ]; then echo "> [ERROR] reverse synchronization only supports synchronization of file types" >&2 ; return 1 ; fi rsync_opt=() if [ -f "${SYNC_HOME}/.fileignore" ]; then rsync_opt+=(--exclude-from="${SYNC_HOME}/.fileignore") fi mkdir -p "$(dirname "$LOCAL_FILE")" set -x rsync -avz \ --delete \ --progress \ --log-file="${SYNC_HOME}/sync-devbox.log" \ --log-file-format="%t %f %b" \ "${rsync_opt[@]}" \ "${DEV_USER}@${DEV_IP}:${FILE}" "${LOCAL_FILE}" set +x echo "> rsync ${FILE} -> ${LOCAL_FILE} success!" } FILE="$1" if [ -z "$FILE" ]; then FILE=$(pwd) fi # usage if [ "$1" = '--help' ] || [ "$1" = '-help' ] || [ "$1" = 'help' ] || [ "$1" = '-h' ] ; then usage ; exit 1; fi # 初始化sync脚本路径 if [ ! -d "$SYNC_HOME" ]; then mkdir -p "$SYNC_HOME" ; fi # 如果在远程目录下那么就表示反向同步 if [[ $FILE == ${REMOTE_HOME}/* ]]; then REVERSE_RSYNC="true"; echo "> reverse_rsync: $REVERSE_RSYNC" ; fi # 执行 if [ "$REVERSE_RSYNC" = "true" ]; then file_reverse_rsync "$FILE" else file_rsync "$FILE" fi
在远程服务器,配置本地服务的公钥,进行免密登陆! 执行 sync.sh
或者 sync.sh [dir]
mac系统配置
这个不能过快,不然双击无法选中东西!
vim 配置 本人参考的配置是: https://github.com/amix/vimrc 直接根据文档操作即可 ,个人fork了一个版本: https://github.com/Anthony-Dong/vimrc/tree/dev
基本操作 control + f 向下翻一页 forward
control + b 向上翻一页 back forward
control + d 向下翻半页 down
control + u 向下翻半页 up
ctrl + e: 向下滚动一行 ctrl + y: 向上滚动一行 line number
+ gg: 掉转到指定行,从1开始/{xxx}: 查找文件内容, shift+n
查找下一个 操作,基本就是视图模式 、基本模式 、编辑模式 、命令模式 ,大概4个模式,其中视图模式需要按v进入 其他基本操作 d删除(Delete),c剪切(Cut),y复制(Yank),p粘贴(Paste),但是一般也兼容 (command+c/command+v)
vim的快捷键 map (递归map, nmap表示非递归)1 2 3 # leader是一个全局的快捷键,例如 \\ map <leader>nn :NERDTreeToggle<cr>
NERDTree 文件树插件 个人喜欢 ctrl + t
打开 NERDTreeToggle
ctrl + w + w
: 其实就是来回切换 目录树/编辑区 的光标o: 打开目录 (或者 enter 也可以) x: 关闭目录 r: 刷新目录 Ctrl-P 搜索文件插件 个人喜欢 ctrl+p
打开 CtrlP
ctrl+c
取消搜索Git-Fugitive Git插件 postman 低版本下载 postman新版本太慢了,而且ui太复杂,所以我个人比较喜欢旧的版本,我个人使用软件的原则是能不升级则不升级!
Release Notes: https://www.postman.com/downloads/release-notes/
例如我要下载 v7.36.7 版本的postman ,平台是macos,可以打开 https://dl.pstmn.io/download/version/7.36.7/osx 进行下载
注意:{version} 需要把 v7.36.7
中的 v
去除掉
不过最新版本,mac-os由于有arm芯片所以:
idea / goland / clion 配置 优化索引缓存 找到安装位置 打开 修改 GoLand.app/Contents/bin/idea.properties
文件,主要作用就是防止电脑重启缓存失效 1 2 3 4 # --------------------------------------------------------------------- # Uncomment this option if you want to customize a path to the caches directory. # --------------------------------------------------------------------- idea.system.path=/Users/bytedance/.GoLand/system
修改GoLand.app/Contents/bin/goland.vmoptions
配置idea的内存,配置最大内存为8G clion/idea 都是同理!