入手新 Mac 后的环境搭建

    Mac Tools

搬家都是耗时的,为了尽可能节省时间,在这里记录下个人基本环境搭建。


Command Line Tools

虽然通过完整安装 Xcode 就能获得 Command Line Tools ,但 Xcode 太大,太费时间,推荐使用以下方法:

打开 Mac 自带的终端 Terminal.app 输入以下指令

$ git

Mac 会提示你 git 这一命令不存在,需要安装 Command Line Tools ,接着就根据提示联网安装即可

下面这个是正式的安装命令,幂等的哦

$ xcode-select --install

Command Line Tools 里包含很多 Linux 默认安装里有的实用工具软件(命令)。

可在 /Library/Developer/CommandLineTools/usr/bin/ 里查看这些软件。


安装 Homebrew

Hombrew 是一款软件管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能,很方便。

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Homebrew 常用指令

## 安装(软件),更新,检查可更新的软件
$ brew search [formulae]   # 查询包含关键词的软件 formulae
$ brew install [formulae]  # 安装指定的软件 formulae
$ brew update              # brew 自我更新
$ brew upgrade [formulae]  # 更新指定的软件 formulae
$ brew outdated            # 查询本地版本低于当前最新版本的软件
$ brew cleanup [formulae]  # 清除本地安装包,释放硬盘空间 - 加关键词就清除指定安装包,不加就全部清除

更多信息可以参考官网这里,包括重新安装 Homebrew


Git

安装好 Command Line Tools 之后,就已经有 Git 了,但并非最新版,追求最新版 Git 需要使用 Homebrew 来安装

$ brew install git

# 查看 Git 的版本号
$ git -v
git version 2.44.0

安装好之后要记得设置一下 Git 的一些参数

$ git config --global user.name "xxxxx"         ## Git 用户名
$ git config --global user.email "xxx@xxx.com"  ## Git 邮箱
$ git config --global color.ui true             ## Git 命令的输出文字色彩化

# 显示当前的 Git 配置
$ git config --list

Git 的一些常用命令整理见这里


安装 Fish Shell

Fish 是一款更好用的 shell ,各种操作都比较符合直觉,在 MacOS 上安装也方便

## 成功安装 fish 后会提示如何设置才能开始正常使用 fish shell
$ brew install fish
==> Installing fish
==> Downloading https://homebrew.bintray.com/bottles/fish-2.7.1.high_sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring fish-2.7.1.high_sierra.bottle.tar.gz
==> Caveats
You will need to add:
  /opt/homebrew/bin/fish
to /etc/shells.

Then run:
  chsh -s /opt/homebrew/bin/fish
to make fish your default shell.

## 如果已经安装过 fish shell , 可以使用以下方式来升级 fish
$ brew upgrade fish

根据上面的提示,fish 安装在 /opt/homebrew/bin/fish 目录下(目录可能会变,以实际为准),所以还需要将其添加到 /etc/shells
因为只有在 /etc/shells 文档里记录的 shell 才能正常访问电脑(正常登陆)

## 此操作会更改 /etc/shells 内容,需要输入管理员密码
$ echo "/opt/homebrew/bin/fish" | sudo tee -a /etc/shells

## 查看当前所有可用的 shell
$ cat /etc/shells

## 查看当前正在使用的 shell
$ echo $SHELL

接着将 fish 设置成终端默认的 shell

$ chsh -s /opt/homebrew/bin/fish

最后是一些常用的自定义设置,更多教程可参看官网或者这篇博客

## 建立 config.fish 文件,该文件相当于 ~/.bashrc 或者 ~/.zshrc 文件,用于 shell 的初始化设置
$ mkdir -p ~/.config/fish
$ vi ~/.config/fish/config.fish

## 设置一个名为 CPPFLAGS 的环境变量,并将它的值设定为 "-I/opt/homebrew/opt/openjdk/include"
## -gx 是两个选项的组合
## -g 表示这个变量是全局的,意味着它在当前会话及其之后启动的任何子进程中都可用
## -x 表示这个变量将被导出到环境变量,这样其他程序也能访问它。
$ set -gx CPPFLAGS "-I/opt/homebrew/opt/openjdk/include"

## 在 fish 中注销变量
$ set -e [变量名]
## Example
$ set -e https_proxy

## 环境变量 $PATH 包含了各种命令(软件)的路径,各个 shell 们运行命令时都会从里面找
## 在 fish shell 中,环境变量 $PATH 的数据类型是一个链表(List),而不是一个包含分号(;)的字符串(String)
## 登陆 Terminal 时,fish 预载入的环境变量其实是  $fish_user_paths + $PATH ,所以常用以下方式来初始化当前用户的环境变量
## 以下命令会将 /opt/homebrew/bin 永久添加到 $fish_user_paths ,进而每次登陆 Terminal 都会自动载入该路径
$ fish_add_path /opt/homebrew/bin

## 查看当前 fish_user_paths 的内容
$ echo $fish_user_paths
/opt/homebrew/bin

## 查看当前 PATH 的内容
$ echo $PATH
/opt/homebrew/bin /usr/local/bin /usr/bin /bin /usr/sbin /sbin

自定义 fish shell 的提示符内容(Customize Prompt)可以通过更改配置文件 fish_prompt.fish 中的函数 fish_prompt 来实现:

## ~/.config/fish/functions/fish_prompt.fish
### Example ###
function fish_prompt --description 'Write out the prompt'
        set -l home_escaped (echo -n $HOME | sed 's/\//\\\\\//g')
   set -l pwd (echo -n $PWD | sed "s/^$home_escaped/~/" | sed 's/ /%20/g')
   set -l prompt_symbol ''
   switch $USER
       case root toor; set prompt_symbol '#'
       case '*';  set prompt_symbol '$'
   end
   printf "%s@%s: %s%s%s %s " $USER (hostname -s) (set_color $fish_color_cwd) $pwd (set_color normal) $prompt_symbol
end

###########################
## 上述配置下提示符的输出格式为:
## username@hostname: ~ $

安装 Fisher

Fisher 也是一款软件管理工具,专门配合 Fish Shell 使用。这里主要是为了后续安装 nvm.fish 方便。

## 可以直接通过 Hombrew 来安装
$ brew install fisher

## 这个是官方的安装方式
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher

## 查看当前已安装的插件
$ fisher list

## 更新指定软件
$ fisher update jorgebucaran/fisher

## 卸载 fisher 和所有通过 fisher 安装的软件
$ fisher list | fisher remove

安装 NVM - Node Version Manager

NVM 是用来管理 Node.js 的,让我们可以在不同版本的 Node.js 之间切换。
后续搭建博客用的 Hexo 依赖于老版本的 Node.js 。所以用 NVM 来安装和切换新老版本是最明智的。
由于用的是 Fish Shell ,所以这里安装的是更方便的 nvm.fish

## 通过 fisher 安装 nvm.fish
$ fisher install jorgebucaran/nvm.fish

## 安装并使用最新版本的 Node.js
$ nvm install latest

## 查看远程有哪些 Node.js 版本可以下载
$ nvm list-remote
    ...
    ...
    v13.14.0 
     v14.0.0
     v14.1.0
    ...
    ...

## 安装 v13.14.0 版本的 Node.js
$ nvm install v13.14.0

## 切换到 v13 版本的 Node.js 来使用
## 由于只安装了 v13.14.0 版本,本地的 v13 只有它,所以会切换到这个版本
$ nvm use v13

## 显示本地有哪些版本的 Node.js 以及当前正在使用的版本
$ nvm list
     system
 ▶ v13.14.0

安装并设置 iTerm2

如果觉得 MacOS 自带的 Terminal 还不够好用和个性化,可以考虑使用 iTerm2 。

官网下载 iTerm2 安装完后,再下载主题样式(Theme)Solarized (你也可去找其他的 Theme,安装同理)

解压刚刚下载的 solarized.zip 文件之后,打开 iTerm2 做以下操作:

  • Preferences -> Profiles -> Colors -> Color Presets -> Import,载入 iterm2-colors-solarized 目录下的两个 itermcolors 文件
  • Preferences -> Profiles -> Colors -> Color Presets ,选择 Solarized Dark
  • Preferences -> Profiles -> Text -> Change Font,可选择字体和字号(建议 Menlo 字体)

将 Mac 键盘上的左 option 键映射为 Esc+ ,以便在 iTerm2 里就可以使用 option + delete 组合来删除一个单词,设置方法如下:

  • Preferences -> Profiles -> Keys

Hexo 博客环境搭建

按以下方法搭建 Hexo 博客的环境,更多参见多电脑间同步 Hexo 博客

## 上面安装 nvm.fish 的环节已经安装了 Node.js ,所以这里就有 npm 命令了
## 使用 Node.js 自带的 npm 安装 Hexo
$ npm install hexo-cli -g

## 安装 SASS - 将 .scss 文件编译成 .css 文件的工具
$ brew install node-sass   

## 还有以下两个常用命令来更新和查看 package.json 里所记录的套件
$ npm update    #更新套件
$ npm outdated  #查看哪些套件过期(即有新版本)

安装 Sublime

Sublime 是一款常用的编辑器,可以去其官网下载,如果不付费使用,则数个保存操作后会跳出未注册的提示

安装完成后打开 Sublime ,使用快捷键 Command + , 打开设置界面
在右侧 Preferences.sublime-settings - User 页的{}内添加以下两行

  • "translate_tabs_to_spaces": true,
  • "tab_size": 2

注:
第一行末尾有英文输入法的逗号“,”;
第二行是最后一行,可以没有逗号;
这两行是设置 Tap 键Space 键的缩进(indentation)效果:第一行将所有 Tab 转换成 Space,第二行指定每个 Tab 换成 2 个 Space

接着建立快捷方式以便在 Terminal 里快速打开

## 以下命令可以在 /usr/local/bin/ 目录下建立 Sublime 的快捷方式,用于快速调用
$ sudo ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl 

## 建好快捷方式后的使用例子
$ subl .   #打开当前目录

Sublime 的常用操作:

  • 注释代码:选中目标内容后,使用快捷键 Command + / 。 sublime 会自动识别当前文件的语言(也可以在 sublime 窗口右下角手动选择语言类型),并使用当前语言的注释方法注释选中内容。如果当前文件包含多语言,那注释的时候就要右下角手动选择语言,注释完后再改回来;

  • 文件夹里全文件搜索和替换:鼠标右键 Sublime 左侧导航窗口中的某个文件夹 -> Find in Folder... ,在弹出的窗口里,Find 一栏输入关键词即可搜索该文件夹中所有包含关键词的文件。如果要同时替换,就在 Replace 一栏输入用于替换关键词的内容即可;

  • 保存所有已打开文件:可通过 File -> Save All 保存,Mac 也可用快捷键:Option + Command + S

  • 关闭所有已打开文件:可通过 File -> Close All Files 关闭;


Rails 开发环境搭建(可选)

安装 ImageMagick 函数库 - 用于今后 Rails 开发中处理图片

$ brew install imagemagick

安装 PostgreSQL - Rails 网站开发常用数据库

$ brew install postgresql
$ brew services start postgresql  ## 启动数据库服务

安装 RVM - Ruby Version Manager 用来管理 Ruby 的版本

$ \curl -sSL https://get.rvm.io | bash -s stable
$ source ~/.rvm/scripts/rvm    ## 安装完 rvm 会提示使用该命令来让 rvm 生效

如果用的是 Fish Shell 而不是 Bash Shell, 则 RVM 需要用以下方法安装,参考RVM 官网说明,因为 Fish 不兼容 Bash (not bash-compatible)
此外,如果是从 Bash Shell 切换到 Fish Shell ,发现各种 RVM 等开发的相关种命令都找不到了,也可通过以下设置来使得 RVM 和原来的 Rails 正常运行

## 这串命令本质上是从 Github 上下载一套指令集放在 Fish Shell 的初始化设置文件夹里,让 Fish Shell 每次启动的时候都运行一次,设置好各种环境变量
$ curl -L --create-dirs -o ~/.config/fish/functions/rvm.fish https://raw.github.com/lunks/fish-nuggets/master/functions/rvm.fish

# activate the default Ruby manually in your config.fish file:
$ echo "rvm default" >> ~/.config/fish/config.fish

安装好 RVM 后再安装一个套件 libxml(后面开发会用到)

$ brew install libxml2

安装所需版本的 Ruby - 以 2.3.1 版本为例

$ rvm install 2.3.1
$ rvm list                ## 该命令可查看本地存在的所有 Ruby 的版本
$ rvm use 2.3.1 --default ## 该命令用于设置默认的 Ruby 版本

$ gem update --system     ## 用于救回安装 rvm 过程中网络等原因造成的中断失败
$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/  ## 设置新的 gem 的来源网站

搞定了 Ruby 之后我们就有了 gem 这个命令,接下来用它安装 Rails

$ gem install rails

## 也可以指定 Rails 的版本来安装
$ gem install rails -v 5.0.0

## 看情况可尝试管理员模式安装
$ sudo gem install rails

注意:2017 年以后的 MacOS 抛弃了 OpenSSL,导致需要安装 OpenSSL 才能运行 gem 这个命令。


打赏