如何优雅地使用 macOS

当时写这篇文章的时候才接触 mac 没多久,使用快两年以后,再次修订了本文。php

0x00 前言

谈及 macOS , 不少人喜欢和 Win 比个高下。在我看来, Win 虽在非编程类生态和易用性比 Mac 要好不少,可专业人士之因此专业是由于他能挑选适合的武器发挥最大的效用,不是吗?node

适合本身的,能让本身用最大效率生产或者是娱乐的,才是更好的工具。python

Win 的优势以下:linux

  • 优良的兼容性。
  • 因为出自于什么都爱作的微软公司,从总体来讲,VS,.NET, 游戏性,兼容性,性能,新手上手速度来讲,都是遥遥领先 Mac 的。

Win 的缺点以下:git

  • 微软的战线实在是拉的太长,什么都想作,什么都想垄断。因而,与之服务密切相关的公司也就受到了 MS 的牵制。这对大公司来讲,几乎是不可以忍受的行为。硅谷的公司使用微软服务的也就接近 5%(可能有偏差)。
  • 糟糕的终端环境(DOS)和没法与、*nux 世界的脚本友好相处使得系统的可定制性和进阶操做性大大下降。
  • 虽然有 Everything,TotalCMD,AHK 这种神级辅助工具能够知足定制要求。但因为太高的学习成本(哈哈哈,混乱也是学习成本之一,AHK 语言真的很混乱啊,TC 实在是太不人性化了)。
  • Python 的环境配置实在是太头疼了

Win 的缺点就是我切到 Mac 上面的缘由。github

macOS 的优势以下:web

  • Mac 的好在于终端和美观的图形的结合。适合不是微软技术栈和重度 Office 的用户。
  • *nux 应用的方便以及很是容易与脚本文件配合出强大的组合技能。
  • 反观 Win 上,则这种组合技能则在环境配置上和操做流畅度上差了不少。

macOS 的缺点以下:sql

  • 娱乐项目实在是少的要死。Metal 和 DirectX 相差不是一点点。
  • 软件和有些少的不仅一点点。

本文从下面几处入手,分别从下面几个角度介绍了 macOSshell

▼ 如何优雅地使用 macOS
    0x00 前言
▼ 0x01 系统内置
    1.1 系统设置
    1.2 自带软件
    1.3 快捷键与触摸板
▼ 0x02 必备软件
    2.1 必备软件 之 平常必备
    ▼ 2.2 必备软件 之 开发必备
        2.2.1 GUI 应用
        2.2.2 CMD 命令
    ▼ 2.3 必备软件 之 编程语言
        2.3.1 Shell
        2.3.2 Python
▼ 0x03 踩坑史
    ▼ 3.1 平常类
        01. 时间机器没法完成备份
        02. 下载站的软件包显示损坏
    ▼ 3.2 编程类
        01. homebrew 的与 Python 的问题
    0xEE 参考连接复制代码

0x01 系统内置

1.1 系统设置

General数据库

  • 默认浏览器 : Google Chrome

Decktop & Screen Saver

  • 桌面 / 屏保

Language & Region

  • 语言
  • 地区设置

Security & Privacy

  • 防火墙

Sharing

  • Remote Control - SSH

Trackpad

  • 设置手势
  • 滚轮 Scrool Direction : Natural

1.2 自带软件

  • iTunes
  • iPhoto
  • iMessage
  • SpotLight -> Alfred 3

1.3 快捷键与触摸板

  • cmd 为 command 按键,一般状况下为全部桌面程序通用性的快捷键。
  • ctrl ,一般状况下是针对程序的功能进行增强,而且此功能每每是非 cmd 类(窗口操做,选择,复制粘贴等等)操做。
  • shift 按键一般用于增强操做。通常会让操做更进一步 or 相反操做。

  • cmd+tab =~ alt+tab 程序之间的切换

  • cmd+` 应用内窗口切换

  • cmd+h 窗口 hide

  • cmd+m 窗口 minimize
  • cmd+n 新建窗口
  • cmd+o 打开
  • cmd+s 保存
  • cmd+shift+s 另存为
  • cmd+p 打印 print
  • cmd+w 关闭
  • cmd+q quit

  • cmd+a select all

  • cmd+i show info
  • cmd+n create a new folder
  • cmd+f search
  • cmd+c copy
  • cmd+v paste
  • cmd+delete 删除选中文件
  • cmd+shift+delete 清空回收站

  • cmd+= 放大

  • cmd+- 缩小
  • cmd+t 新建选项卡
  • cmd+r 刷新

  • cmd+shift+3 截取整个屏幕

  • cmd+shift+4 截取选择区域
  • cmd+shift+4+SPACE 截取选择窗口
  • cmd+ 鼠标点击 -> 选中不连续文件
  • control+ 鼠标点击 -> 至关于 win 中右键点击

  • fn+left home

  • fn+right end
  • fn+up pageup
  • fn+down pagedown

触摸板手势:

  • 点击

    • 单指点击 - 单击
    • 单指滑动 - 滑动鼠标光标
    • 双指点击 - 至关于 Windows 的鼠标右键
    • 三指点击 - 划词查找
  • 滑动与缩放

    • 双指上下滑动 - 滚动
    • 双指缩放 - 与 Android 上图片缩放一致
    • 双指双击 - 只能缩放
    • 双指旋转 - 旋转
    • 双指左右滑动 - 应用内切换网页
    • 双指头从右往左
    • 三指头左右滑动 - 全屏幕 App 切换
    • 大拇指和食中无名缩放 - launchpad

0x02 必备软件

2.1 必备软件 之 平常必备

  • 启动器

    • Alfred 3
    • SpotLight
  • 网络工具

    • Chrome
  • 社交通信

    • QQ
    • WeXin
  • 图形图像

    • Adobe PhotoShop CC
    • Adobe PhotoShop LightRoom
    • Sketch
    • Annotate
    • Camtasia 2
    • Snagit
    • ScreenFlow
    • Final Cut Pro
    • MPlayerX
    • QuickTime
    • iQiyi
    • NeteaseMusic
    • IINA
  • 办公软件

    • 欧陆词典
    • Calibre
    • Wiznote
    • PDF Reader
    • iBook
    • Microsoft Office
    • Work 套件:包括 pages, numbers, keynote
    • XMind
    • Airmail
    • TeamViewer
    • OmniFocus
    • OmniGraffle
    • OmniOutline
    • OmniPlan
  • 系统软件

    • 搜狗输入法
    • AppCleaner
    • CleanMyMac
    • VMWare
    • BetterZip
    • Caffeine / Amphetamine
    • PopClip
    • HandShaker
    • AirDroid

2.2 必备软件 之 开发必备

2.2.1 GUI 应用

  • 终端用户

    • iTerm2
  • IDE

    • PyCharm
    • IntellijIDEA
    • WebStorm
  • 编辑器

    • MacVim 配合 C-VIM
    • Sublime Text 3
  • 后台组件

    • MySQL
    • PostgreSQL
    • Redis
    • MongoDB
  • 数据库管理软件

    • Navicat
    • Datagrip
    • RoboMongo
    • RDM
    • Dash
  • 网络工具

    • SS QT
    • Charles, Wireshark
  • Chrome

    • Exporter : 百度云,须要离线安装
    • AdBlock : 广告拦截
    • AutoPatchWork : 连接下一页
    • Axure RP Extension : Axure
    • CSSViewer
    • Dream Afar New Tab
    • JSON Editor
    • JSON View
    • Octotree
    • One-Click Extensions Manager
    • Proxy SwitchyOmega
    • React Developer Tools
    • Redux DevTools
    • Vue.js devtools
    • Vimium
  • 代码仓库

    • Github Desktop
    • SourceTree
  • GIS 相关

    • ArcGIS
    • QGIS
    • PostgreSQL + PostGIS

2.2.2 CMD 命令

if test ! $(which brew); then
    echo "Installing homebrew..."
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
fi

# Make sure we’re using the latest Homebrew.
brew update

# Upgrade any already-installed formulae.
brew upgrade --all

# Install GNU core utilities (those that come with OS X are outdated).
# Don’t forget to add `$(brew --prefix coreutils)/libexec/gnubin` to `$PATH`.
brew install coreutils
sudo ln -s /usr/local/bin/gsha256sum /usr/local/bin/sha256sum

# Install some other useful utilities like `sponge`.
brew install moreutils
# Install GNU `find`, `locate`, `updatedb`, and `xargs`, `g`-prefixed.
brew install findutils
# Install GNU `sed`, overwriting the built-in `sed`.
brew install gnu-sed --with-default-names
# Install Bash 4.
brew install bash
brew tap homebrew/versions
brew install bash-completion2
# We installed the new shell, now we have to activate it
echo "Adding the newly installed shell to the list of allowed shells"
# Prompts for password
sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
# Change to the new shell, prompts for password
chsh -s /usr/local/bin/bash

# Install `wget` with IRI support.
brew install wget --with-iri

# Install RingoJS and Narwhal.
# Note that the order in which these are installed is important;
# see http://git.io/brew-narwhal-ringo.
brew install ringojs
brew install narwhal

# Install Python
brew install python
brew install python3

# Install ruby-build and rbenv
brew install ruby-build
brew install rbenv
LINE='eval "$(rbenv init -)"'
grep -q "$LINE" ~/.extra || echo "$LINE" >> ~/.extra

# Install more recent versions of some OS X tools.
brew install vim --override-system-vi
brew install homebrew/dupes/grep
brew install homebrew/dupes/openssh
brew install homebrew/dupes/screen
brew install homebrew/php/php55 --with-gmp

# Install font tools.
brew tap bramstein/webfonttools
brew install sfnt2woff
brew install sfnt2woff-zopfli
brew install woff2

# Install some CTF tools; see https://github.com/ctfs/write-ups.
brew install aircrack-ng
brew install bfg
brew install binutils
brew install binwalk
brew install cifer
brew install dex2jar
brew install dns2tcp
brew install fcrackzip
brew install foremost
brew install hashpump
brew install hydra
brew install john
brew install knock
brew install netpbm
brew install nmap
brew install pngcheck
brew install socat
brew install sqlmap
brew install tcpflow
brew install tcpreplay
brew install tcptrace
brew install ucspi-tcp # `tcpserver` etc.
brew install homebrew/x11/xpdf
brew install xz

# Install other useful binaries.
brew install ack
brew install dark-mode
#brew install exiv2
brew install git
brew install git-lfs
brew install git-flow
brew install git-extras
brew install hub
brew install imagemagick --with-webp
brew install lua
brew install lynx
brew install p7zip
brew install pigz
brew install pv
brew install rename
brew install rhino
brew install speedtest_cli
brew install ssh-copy-id
brew install tree
brew install webkit2png
brew install zopfli
brew install pkg-config libffi
brew install pandoc

# Lxml and Libxslt
brew install libxml2
brew install libxslt
brew link libxml2 --force
brew link libxslt --force

# gitbook autocover
brew install pkg-config cairo pango libpng jpeg giflib

# Install Cask
brew install caskroom/cask/brew-cask
brew tap caskroom/versions

# aerial 屏保
# https://github.com/JohnCoates/Aerial
brew cask install aerial
# https://github.com/sindresorhus/quick-look-plugins
brew cask install qlcolorcode qlstephen qlmarkdown quicklook-json qlprettypatch quicklook-csv betterzipql qlimagesize webpquicklook suspicious-package quicklookase qlvideo

brew update && brew upgrade --all && brew cleanup && brew prune复制代码

2.3 必备软件 之 编程语言

2.3.1 Shell

MAC 使用的大多命令行工具来自于 FreeBSD , 并非来自 GNU , 因此不少命令会与常规的 linux 命令大同小异。

而本人喜欢 GNU 系软件。

Shell 脚本可参考个人笔记。 第九节如何优雅的使用 Shell_

说到 shell, 除了要使用 bash 的 shell 以外,zsh 的 shell 也值得一试。(不过大神 kennethreitz 最喜欢 fish shell )

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"复制代码

2.3.1.1 Oh My Zsh

2.3.2 Python

笔者虽然也接触过不少语言,都是粗浅一过,但无一精通,惟一能够稍微谈谈的就是 Python 语言。

固然,安装完毕天然是能够参考一下个人 第三节 Pythonista 的工具集_

国内外网络环境不通畅,安装与配置环境这件小事也就成了一个大事情。

我对于 Python 版本的安装 和 Python 依赖包管理有三个阶段:

  • 入门级
  • 新手级
  • 熟手级

2.3.2.1 入门级

最初是入门级,我配置环境和大部分的 Pythonista 同样,最第一版:

  • 面对 Python 版本的管理,干脆就是无论理,brew 安装一个 Python2 用于开发 Python2 的代码,brew install 一个 Python3 用于 Python3 的代码开发。
  • 面对 Python 依赖包管理,干脆就是直接使用 virualenv 或者他的 wrapper 直接 venv 一个环境,而后 active 一下,接着 PIP install -r req.txt

2.3.2.2 新手级

  • 面对 Python 版本的管理,使用 pyenv
  • 面对 Python 依赖包管理,使用 pyenv virtualenv 出多个环境,而后切换环境就行了。
brew install pipenv
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc

# 接着另开终端
# 不喜写兼容代码,全部代码均向 3.5+ 靠拢
v=3.5.2|wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v
v=3.6.0|wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v
v=2.7.11|wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v
# 能够先用迅雷把 官网的 Anaconda3-4.4.0-MacOSX-x86_64.sh 下载下来,而后
mv Anaconda3-4.4.0-MacOSX-x86_64.sh ~/.pyenv/cache/ && pyenv install anaconda3-4.4.0

# 设置 Global Python 为 2.7.11, 备注:尽可能不要把 Py3 设置为全局,不然因为 Homebrew 自己有一些依赖是依赖于 Py2 的,这样容易出现一些奇怪的问题。
pyenv global 2.7.11
pip install -i https://pypi.doubanio.com/simple requests
# 下面这个是用于安装基本的代码补全功能
pip install -i https://pypi.doubanio.com/simple --upgrade "jedi>=0.9.0" "json-rpc>=1.8.1" "service_factory>=0.1.5" flake8 pytest autoflake hy

# 建立最经常使用 Py3 虚拟环境
pyenv virtualenv 3.5.2 py3-daily
pyenv activate py3-daily
pip install -i https://pypi.doubanio.com/simple requests
pip install -i https://pypi.doubanio.com/simple beatutifulsoup4
pip install -i https://pypi.doubanio.com/simple ipython[notebook]
pip install -i https://pypi.doubanio.com/simple jupyter
# 下面这个是用于安装基本的代码补全功能
pip install -i https://pypi.doubanio.com/simple --upgrade "jedi>=0.9.0" "json-rpc>=1.8.1" "service_factory>=0.1.5" flake8 pytest autoflake hy

# 建立 Anaconda 的数据科学 AI 环境
pyenv virtualenv anaconda3-4.4.0 py3-ai
pyenv activate anaconda3-4.4.0/envs/py3-ai
pyenv deactivate

# 进入一个项目以后
pyenv activate py3-proj
pip install -r requirements/local.txt
pip install -r requirements/prod.txt
# requirements/local.txt 与 requirements/prod.txt 依赖于 requirements/base.txt复制代码

2.3.2.3 熟手级

其实,第一种入门级管理方式弊病在于,python 版本太粗糙,以前遇到一个 python3.3 的问题,python3.4 就解决了。而为了不这种奇葩的版本差别带来的潜在风险,开发与部署通常要锁死 Python 版本。

即使是解决了入门级管理方式带来的版本管理粗糙的问题,一样的,依赖也要锁死。一个项目对应一种环境该多好 经过 PIP 的确能够用 freeze 输出为 txt 达到锁死的目的。但我的认为,这个还不够,至少要知道依赖树之类的吧?还要知道哪些东西是能够更新的吧?

并且,就应该像 node 项目里面的 package.json 同样,把依赖什么乱七八糟的东西都放进去才好。

  • 面对 Python 版本和依赖包管理,使用 pipenv

这表明着,只要一个就好了。

2.3.3 JavaScript 与 Node 环境

nvm && npm && yarn

nvm 主要用户管理 node 的版本,linux / mac only ,windower 最好下载 node 版本安装,记得配置环境变量。

npm 主要用户管理包,国内人喜欢使用 cnpm, 可是 cnpm 包管理比较渣,因此通常状况下选择 Yarn 配合管理

npm install cnpm
cnpm install yarn -g
# 查看下载源
# yarn config get registry
yarn config set registry https://registry.npm.taobao.org复制代码

yarn 在使用包管理的时候会分析依赖,这对老是 BUG 不断的 node_module 简直是福音。

2.3.4 Java

Java 环境安装稍微有一丢丢蛋疼。特别是多版本管理。

TODO: 之后补充 JAVA 环境安装复制代码

2.4 必备配置 之 dotfiles

详细内容请见 yadotfiles

  • 依照我我的的习惯,在 OhMyZsh 基础上增长了我的习惯的环境变量的配置,一些函数的封装。

好比,当我在写本文的目录中输入 todos, 就能够查看该我在写文章的时候里面挖了多少个尚未填上去的 TODO(坑)。以下

3e383c54 (Micheal Gardner 2017-11-18 12:40:38 +0800 422) ## 0xEE TODO TO LIST
ae86b7cb (Micheal Gardner 2017-11-19 21:39:49 +0800 245) ### 5. TODO
c0d51990 (Micheal Gardner 2017-11-22 16:42:08 +0800 552) TODO: 之后补充 JAVA 环境安装
c0d51990 (Micheal Gardner 2017-11-22 16:42:08 +0800 561) 好比,当我在写本文的目录中输入 todos, 就能够查看该我在写文章的时候里面挖了多少个尚未填上去的 TODO(坑)。复制代码

详细请参考 yadotfiles

0x03 踩坑史

3.1 平常类

01. 时间机器没法完成备份

我有按期备份的习惯,在一次备份中,意外的发现怎么备份都没法备份完毕,通过几回测试:

  1. 我首先猜想是硬盘问题,换了一块硬盘,问题依旧。
  2. 复制了几个大文件,感受也不太像是接口接触不良的问题。
  3. 我认为多是文件数量过多致使的问题。因而删除掉 node_module 后再次备份,备份成功。固然,这也有必定几率是误打误撞。毕竟从几率学上讲,坏掉的钟还能一天有两次时间是对的呢。

外接硬盘的时候,将网络关闭便可。

02. 下载站的软件包显示损坏

有的时候并非软件损坏,而是 macOS 的安全配置中配置关掉了未识别出的 App

在终端中开启这个选项,并在安全与隐私处点上 anywhere 便可。

sudo spctl --master-disable复制代码

3.2 编程类

01. homebrew 的与 Python 的问题

在 Python 中执行下面的代码的时候老是报错:

ip = socket.gethostbyname(socket.gethostname())
# socket.gaierror: [Errno 8] nodename nor servname provided, or not known

# 最后发现是由于设置主机名没有设置好
sudo scutil --set ComputerName "newname"
sudo scutil --set LocalHostName "newname"
sudo scutil --set HostName "newname"
dscacheutil -flushcache
# 而后重启电脑便可复制代码

若是本机安装了 Homebrew 若是后面使用 PyEnv 或者 Anaconda 而且设置当前环境为默认 Python 为 Python3(不建议这么搞), 可是若是恰恰要把默认的 Python 版本换成 Python3, 会弹出一些 pythonpath
的问题,执行下面命令便可暂时屏蔽这个问题,可是没有隐患则不清楚。

mv /usr/local/lib/python2.7/site-packages/sitecustomize.py /usr/local/lib/python2.7/site-packages/sitecustomize.py.back复制代码

02. Homebrew 安装过去的文件

0xEE 参考连接

  • 本文部分命令行安装借鉴了 dev-setup

ChangeLog:

  • 2016-02 肯定大体内容
  • 2017-06-28 重修文字,调整文章结构,Python 环境 和 Homebrew 安装环境
  • 2017-10-05 再次重修文字,不按期更新
相关文章
相关标签/搜索