0%

Mac 个人开发环境搭建

​ 个人的Mac环境,主要是解决一些更换电脑时需要重新搞一些东西,以及分享一下个人mac的配置,以及一些命令的推荐!

安装常用命令

brew和 on-my-zsh

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 插件

  1. zsh-autosuggestions 命令记录/推荐

image-20230412002747524

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
)
  1. zsh-syntax-highlighting 高亮
1
git clone --depth 1 https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting

image-20230412003736441

  1. 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
  1. 关于 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"

系统工具安装

  1. brew install htop

安装语言环境

  1. 安装GO语言,文档: gvm
1
2
3
4
5
6
7
8
9
10
11
## 安装gvm
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

## 注意: 配置一下这个, gvm会重写GOPATH.
source ${HOME}/.gvm/scripts/gvm
export GOPATH=$HOME/go

## 下载和使用
gvm install go1.17
## 默认使用 go1.17
gvm use go1.17 --default
  1. 安装openjdk
1
brew install openjdk@8
  1. 安装其他语言
1
2
# 配置python 使用 python3
alias python=python3
  1. 安装vscode

一定要配置这个,可以做到 anywhere code xxxx !!!

image-20221202232952978

ls 高亮

alias 下 alias ls='ls -F --show-control-chars --color=auto'

个人高频脚本

数据同步文件脚本

这个脚本主要是本地和远程双向同步,远程开发的话直接用 remote-ssh 或者 cloud-ide 即可!

  1. 记得在 ${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
  1. ${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
  1. 在远程服务器,配置本地服务的公钥,进行免密登陆!
  2. 执行 sync.sh 或者 sync.sh [dir]

mac系统配置

image-20211129001649131

这个不能过快,不然双击无法选中东西!

vim 配置

本人参考的配置是: https://github.com/amix/vimrc 直接根据文档操作即可 ,个人fork了一个版本: https://github.com/Anthony-Dong/vimrc/tree/dev

  1. 基本操作
  • control + f 向下翻一页 forward
  • control + b 向上翻一页 back forward
  • control + d 向下翻半页 down
  • control + u 向下翻半页 up
  • ctrl + e: 向下滚动一行
  • ctrl + y: 向上滚动一行
  • line number + gg: 掉转到指定行,从1开始
  • /{xxx}: 查找文件内容, shift+n 查找下一个
  1. 操作,基本就是视图模式基本模式编辑模式命令模式,大概4个模式,其中视图模式需要按v进入

其他基本操作 d删除(Delete),c剪切(Cut),y复制(Yank),p粘贴(Paste),但是一般也兼容 (command+c/command+v)

  1. vim的快捷键
  • map (递归map, nmap表示非递归)
    1
    2
    3
    # leader是一个全局的快捷键,例如 \\
    # <leader>nn 含义就是 \\nn那么它等价于 :NERDTreeToggle<cr>
    map <leader>nn :NERDTreeToggle<cr>
  1. NERDTree 文件树插件
  • 个人喜欢 ctrl + t 打开 NERDTreeToggle
  • ctrl + w + w: 其实就是来回切换 目录树/编辑区 的光标
  • o: 打开目录 (或者 enter 也可以)
  • x: 关闭目录
  • r: 刷新目录
image-20230320204915571
  1. Ctrl-P 搜索文件插件
  • 个人喜欢 ctrl+p 打开 CtrlP
  • ctrl+c 取消搜索
image-20230320205021500
  1. Git-Fugitive Git插件
  • Gvdiffsplit 可以快速看到diff
image-20230320204831357

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去除掉

平台下载地址
Windows64位https://dl.pstmn.io/download/version/{version}/win64
Windows32位https://dl.pstmn.io/download/version/{version}/win32
Machttps://dl.pstmn.io/download/version/{version}/osx
Linuxhttps://dl.pstmn.io/download/version/{version}/linux

不过最新版本,mac-os由于有arm芯片所以:

idea / goland / clion 配置

优化索引缓存

  1. 找到安装位置 打开
image-20240411210640291
  1. 修改 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
  1. 修改GoLand.app/Contents/bin/goland.vmoptions 配置idea的内存,配置最大内存为8G
1
2
-Xms1024m
-Xmx8192m

clion/idea 都是同理!

本人坚持原创技术分享,如果你觉得文章对您有用,请随意打赏! 如果有需要咨询的请发送到我的邮箱!