Mac 使用技巧

使用 Mac 用到的一些方法

取消Mac工作区切换之后自动重排

工作区切换后自动重排真是一个非常sb的功能。可能我原本将Xcode,Chrome,微信排好的顺序在切换了一次程序之后就变了。这是一直困扰我的一个问题。

解决方法其实很简单,在“偏好设置”中选择“调度中心”,取消“勾选根据最近的使用情况自动重新排列 Spaces ”即可。

隐藏 docker

docker 非常占用桌面空间,如果你为常用应用设置了快捷键,并且使用 Alfred,那么你就可以摆脱 docker,将其隐藏。方式是将 docker 设置为不用时隐藏,然后通过命令行设置显示时间:

1
2
3
4
-- 设置鼠标到对应位置停顿十秒才会显示
$ defaults write com.apple.dock autohide-delay -int 10
-- 设置立刻重启docker
$ killall Dock

搜索目录下的文件

使用 grep

1
2
-- 搜索当前目录下名字带有 zachary 的文件。文件名使用正则表达式
$ ls -R | grep zachary

不过这样不带子文件夹的路径。只适合在当前文件夹下。

使用 find

1
2
-- 搜索当前目录下名字带有 zachary 的文件。文件名使用通配符
$ find ./ -name '*zachary*'

拷贝文件到目标机器

通过 scp 将文件拷贝到目标机器的根目录下

1
scp ./xxx.js 10.26.5.145:~

ssh免密登录

在目标机器的 .ssh 文件夹下新建一个 authorized_keys 文件,在其中加入自己的 ssh_pub 即可

登录的时候输入:

1
ssh zachary@10.26.5.145

退出使用

1
exit

应用程序弹窗选择

有时候应用程序会弹窗,如下图,你只能按回车确定,否则必须使用鼠标选择取消:

可以通过在命令行下敲如下命令提供键盘的控制方式:

1
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3

就可以通过 tab 切换选中项,space 选中选中项(enter 还是表示默认确定)

装机必备

安装 homebrew

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装 cocoapods

修改 ruby 源
1
2
3
4
5
6
//删除默认源
$gem sources --remove https://rubygems.org/
//添加新源
$gem sources -a http://gems.ruby-china.org/
//查看
$ gem sources -l
安装 cocoapods
1
$ sudo gem install cocoapods

安装 node

1
brew install node

安装好node自然就安装好 npm 了。

使用 iterm2

iterm2 最强大的功能就是可以分屏。还有就是可以选中即复制,以及按住 command 点击就可以直接跳转到文件夹或者网页。

下载主题

官方的颜色默认是黑色的,可以去Iterm2-color-schemes下载主题,下载 tar.gz 或者 zip 的压缩包,然后会下载非常多的配色。然后按照如下图操作配色:

推荐使用 Solarized Dark Higher Contrast

下载 zsh

zsh 可以提供一个很强的命令补全的功能,反正不太记得的命令或者参数,只要按 tab 就行了。下载也比较简单:

1
curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh

curl 是利用URL语法在命令行方式下工作的开源文件传输工具。

另外,下载之后终端会变得比较好看。

下载字体 Fira

字体 Fira 非常圆润,适合作为代码编辑器的字体,下载也非常简单。但是比较字体包有点大:

1
2
brew tap caskroom/fonts
brew cask install font-fira-code

brew 表示 homebrew

VSCode 同步方案

VSCode 的插件 Setting Sync 提供了通过 github 的 Gist 完成配置同步的功能。但是由于它的教程不完整,导致同步起来会产生省问题。最常见的问题是无法下载配置,提示信息为:Sync : Invalid / Expired GitHub Token. Please generate new token with scopes mentioned in readme. Exception Logged in Console.

Gist 可以保存上传的配置文件。拉取配置文件需要配置两个 id,一个是 Gist Id,一个是 Token Id。这两个 Id 前者标识配置文件,后者用于身份验证。我们无法下载的原因就是我们使用单单在 Sync:Download Settings 命令中使用了 Gist id,所以错误提示才是无效的 token。

那么该怎么进行身份验证呢?还是在 VSCode 中输入命令:Sync:Advanced Options,然后选择 Sync:Edit Extension Local Settings,编辑 syncLocalSettings.json 这个配置文件。这个文件中有一项 token 没有设置,这里就需要设置为 Token Id。你可以用之前上传配置文件时设置的 Token,也可以再新建一个 Token。

sudo 仍然无法获得权限

有些时候使用 sudo 命令仍然会失败,提示 Operation not permitted。这是因为开启了 sip 的缘故。我们需要关闭 sip:

  1. 重启OSX系统,然后按住Command+R,进入恢复模式
  2. 出现界面之后,选择屏幕左上角菜单栏中的实用工具中的Terminal,打开终端
  3. 在Terminal中输入csrutil disable 关闭SIP
  4. 重启reboot OSX

npm 全局安装无权限

有时候我们使用 sudo npm install -g xxx 的时候仍然提示 Error: EACCES: permission denied

这个时候可以增加一些选项:

1
sudo npm install -g xxx --unsafe-perm=true --allow-root

shell 脚本 sudo 命令不输入密码

expect

expect 可以在需要密码的时候输入密码。安装 expect 非常简单:

1
brew install expect
1
2
3
4
5
6
7
8
9
#!/usr/bin/expect
set timeout 30
spawn bash "./Untitled-1.sh"
expect {
Password: { send xxxx\r }
Password: { send xxxx\r }
Password: { send xxxx\r }
}
interact

#!/usr/bin/expect 表示到 interact 为止,都使用 expect 执行

spawn 该命令用于启动一个子进程,执行后续命令.

expect 从进程接受字符串,如果接受的字符串和期待的字符串不匹配,则一直阻塞,直到匹配上或者等待超时才继续往下执行。上面的 Password: 就是执行 sudo 命令是会出现的。 这里模拟了三个会出现 Password: 输入密码的场景。

send 向进程发送字符串,与手动输入内容等效,通常字符串需要以’\r’结尾。

interact 该命令将控制权交给控制台,之后就可以进行人工操作了。通常用于使用脚本进行自动化登录之后再手动执行某些命令。如果脚本中没有这一条语句,脚本执行完将自动退出。

sudo 不要密码

除了用 expect 在需要密码的时候输入外,还可以设置 sudo 不需要密码。虽然不安全,但是一般个人使用也不会有什么问题。

输入 sudo visudo 会打开 /etc/sudoers 文件,这就是要修改的配置文件。

然后再最后输入:

1
zachary ALL=(ALL) NOPASSWD: ALL

保存并推出。此时 sudo 就不会再需要密码了。

那么这句话是什么意思呢?

第一个字段 zachary 表示使用 sudo 命令的用户为 zachary

第二个字段,等号左边的 ALL 表示允许使用 sudo 的主机。这里是所有主机。

第三个字段,等号右边的 (ALL) 表示使用 sudo 后一什么身份来执行命令。

最后一个字段 NOPASSWD: ALL 表示所有命令,都不需要密码。

管道与 xargs

管道

管道的作用就是把前一个命令的标准输出作为后一个命令的标准输入,比如:

1
ls -a | grep myfile

上面的命令就是把列出所有文件的输出,作为正则匹配查找的输入。

但是很多程序是不处理标准输入的,例如 kill , rm 这些程序如果命令行参数中没有指定要处理的内容则不会默认从标准输入中读取,所以:

1
ls -a | grep myfile | rm -f

这个命令是无法删除 myfile 相关的文件的。这时候就需要使用 xargs

xargs

xargs 和管道有什么不同可以看下面这个例子:

1
2
3
4
5
6
echo '--help' | cat 
输出:
--help

echo '--help' | xargs cat
输出同 cat --help

可以发现,xargs 将其接受的字符串 —help 做成cat的一个命令参数来运行cat命令。

所以上面的删除方法要改成如下,就是可以达到目的的:

1
ls -a | grep myfile | xargs rm -f

xargs 还有许多参数,可以用在需要多个参数的情况,如果有需求,可以查阅使用。

使用 npmrc 登录 npm

我们要发布自己的 npm 包的时候,需要先登录到 npm。那么,npm 怎么验证发布的是本人呢?当我们在 shell 里登录到 npm 的时候,在 home 目录下会生成一个 .npmrc 文件。这个文件里有个 authToken ,同时,你的 npm 账户里的 token 列表里也会产生一个相应的 token。当你要发布代码的时候,npm 就会比较账户里的 token 是否包含这个 authToken。如果你手动删除了 npm 账户里的 token,那么之后也就无法通过该 authToken 登录了。

另外,每个项目里都可以有一个 .npmrc 使用不同的 token。项目里没有 token 的情况下才回去 home 下查找 .npmrc

自制一个搜索 Markdown 文件的 workflow

可以自制一个 workflow 而不是使用 open 打开 markdown 文件。

主要步骤就是新建一个 workflow,然后 右键→Inputs→File Filter。这里的重点就是选择 File Filter,这样系统会自动进行文件搜索。然后在弹出的设置界面设置关键字,以及搜索的文件类型。你也可以在第二个选项卡中设置搜索路径:

然后设置这个操作的动作:拉线→Actions→Open File。Open File 出现的设置界面不用任何操作,直接点完成即可:

一般我们使用的打开 Xcode 工程也可以这样设置。

Alfred3 开机访问通讯录

破解的 Alfred3 每次开机都要访问通讯录,解决办法是在终端中进行签名:

1
sudo codesign -f -d -s - /Applications/Alfred\ 3.app/Contents/Frameworks/Alfred\ Framework.framework/Versions/A/Alfred\ Framework

安装的Mac应用显示已损坏无法打开

设置 => 安全性与隐私 => 通用 => 允许从以下位置下载的应用 => 任何来源

如果没有 任何来源 这个选项,需要执行命令:

1
sudo spctl --master-disable

如何显示/不显示隐藏文件

在终端中执行如下代码并重启动Finder。

1
2
3
4
显示隐藏文件:
defaults write com.apple.finder AppleShowAllFiles -bool TRUE
停止显示隐藏文件:
defaults write com.apple.finder AppleShowAllFiles -bool FALSE

新系统中更好的方式:

可以使用快捷键 shift+command+.

handoff 无法使用

handoff 是一个能在电脑和手机间共享信息的东西,但是有的时候就是识别不到。如果已经明确自己开启了 handoff 但是任然无法使用,那么可以先关闭电脑的蓝牙功能,然后再打开。这样就可以使用了。

如何破解欧路的使用次数限制

非注册用户只能使用 Xcode 50次,为了省这 98块钱就在网上找破解版,无意中搜到了修改使用次数的方法。

~/library/preferences/ 文件夹里,找到 com.eusoft.eudic.plist 文件。用 Xcode 打开它,然后找到并修改 MAIN_TimeLeft 的值:

1
<key>MAIN_TimeLeft</key>	<integer>50</integer>

修改