mac 初上手的疑问与困惑

本文最后更新于:2024年11月11日 上午

场景

换了 m2 macbook,作为一个 windows 长期使用者,截止目前为止遇到了很多问题和疑惑,有些解决了,有些目前仍未找到解决方法,在此记录和分享。

另外还写过两篇关于 Windows 的

系统

如何添加字体

之前日常的字体为更纱黑体,它并不出色,但主要优势是以统一的风格支持简繁日英四种语言。
基本步骤和 windows 类似,下载 ttc 点击打开,等待验证通过即可。不过 mac 上这个过程会很慢很慢很慢以至于让我以为出现了 bug。

如何外接显示屏关闭盖子不熄屏

虽然查了一堆答案,但实际上只要外接电源并将外部显示器设置为主显示器即可。

仍然有 bug,有时候使用外接键盘鼠标一直无法唤醒。

如何调整鼠标反向过来

最开始遇到的非常不习惯的地方,不过可以使用工具 SCROLL REVERSER 将之设置为反向。

mac 查看全局快捷键占用

没有找到真正可用的,后续通过 google + 提问查找 mac 的快捷键设置。

如何使用其他输入法

直接使用系统的输入法下载即可,然后可以使用 ctrl+space 切换输入法。

由于与 vscode 提示建议的快捷键冲突,修改为 ctrl+shift+space

mac 上不使用 fn 就使用功能键

在系统设置 将 F1、F2 等键用作标准功能键 启用,ref: https://support.apple.com/zh-cn/HT204436
1675933558696.png

实测 F5 刷新浏览器页面的快捷键并未生效。。。

mac 不再提示权限请求

每次打开国产软件都会请求权限,但禁止后下次打开仍然会提醒,有办法像 android/浏览器 一样永久禁止指定软件的权限请求么?

1676338817475.png

无法关闭,因为这是应用程序创建的窗口。

如何在应用关闭主窗口时从 dock 栏隐藏

这取决于应用是否支持该行为,例如 ssr 支持关闭窗口后最小化到右上角,但 proxifier 就不支持,必须在 dock 栏占一个位置。

如何列出所有窗口切换

mac 的 command+tab 只能切换应用,但同一个应用中的多个窗口则无法切换。
使用同一应用切换多个窗口时,需要使用 command+~ 快捷键。
列出所有窗口可以使用 ctrl+top 快捷键,但无法使用快捷键切换,必须右手从鼠标上移动到键盘再移动回鼠标太反直觉了,而且大小不一很奇怪。

使用 alt-tab 可以恢复类似于 windows 的行为。
6a9735ba560f48bb913d8fed5171aa17.jpg

禁用 chrome 里的右键菜单

默认情况下 chrome 会显示几个 mac 的集成右键菜单项,它们大部分时候并不实用,需要禁用。
1676515401808.png
嗯,看起来这个问题似乎是不可解决的,这真的很糟糕。ref: https://superuser.com/questions/1012292/

修改在输入中光标移动为 windows 的快捷键

mac 上的移动光标快捷键可能很好,但显然与 windows 上有相当大的差异。
在 windows 中一般使用以下键来移动光标:

  • home/end 跳转到行首/行尾
  • ctrl+home/end 跳转到文本首/文本尾
  • ctrl+left/right 跳转到单词首/单词尾

以上按键都可以与 shift 配合使用。

可以通过 Karabiner-Elements 配置全局键盘映射可以缓解这个问题。
1676608991086.png

如何从第三方下载 dmg 文件

暂未处理

如何杀死特定进程

有时某个后台程序卡死需要重启,但活动监视器似乎无法右键杀死一个进程。
使用 linux 命令 ps + kill -9


在 活动监视器 中先选中想要杀死的进程,然后点击导航栏的 ⊗
1677041471659.png

禁用 mac 上 cmd+shift+a 触发 No manual entry for setting;type=a

在 jetbrains 的 ide 中,cmd+shift+a 会触发 No manual entry for setting;type=a,又是 mac 自作聪明的快捷键。
1679969498468.png

可以通过以下方式解决:

  1. 打开 系统设置 => 键盘 => 键盘快捷键 => 服务
  2. 禁用 文本 => 在 “终端” 中搜索 man 界面索引

1679969667352.png

自动关闭右上角的通知弹窗

有时候系统会弹出一些通知,比如更新软件,但是这些通知会一直显示在右上角,如果不主动关闭就会一直存在,非常烦人,更期望像 windows 一样自动隐藏并且需要可以在通知列表查看。

1680158199513.png

Automator 之类的似乎只能设定快捷键关闭,并不能在自动在几秒钟后关闭系统通知。

设置 gmail 网页版为系统默认邮件客户端

mac 自带的邮件客户端,可能很好用,但已经习惯 gmail,所以希望能够设置 gmail 为系统默认邮件客户端。这个步骤比 windows 上麻烦的多,参考教程:https://zhuanlan.zhihu.com/p/530508168

如何在通过 usb 向手机差异同步文件

实际需求是需要同步 OneDrive 与电子书阅读器的目录,但神奇的是 mac 连接 android 手机后,无法通过 finder 直接向手机传输文件,必须通过 google 的 Android File Transfer 的程序才能实现,但它并不能做差异同步。

算是明白为什么有人不喜欢 mac,说它太封闭的原因了,它对自家之外的东西支持太烂了。

禁用鼠标移到右下角显示备忘录

  1. 打开 系统设置 => 搜索“触发角” => 触发角快捷键
  2. 删除右下角的备忘录触发

1681267609807.png

ref: https://www.zhihu.com/question/502048404

解决状态栏空间不够隐藏部分应用图标的问题

例如,有时会发现 mac 上同时打开的应用太多,一些应用的图标在右上角的状态栏已经看不到了。

1714395387992.jpg

这种情况下,可以使用第三方工具来实现特定图标隐藏的需求,但更简单的方式是删除不需要的系统图标,例如声音、蓝牙等,因为它们都可以在控制中心找到,如果使用频率很高,也可以从控制中心再拖回来。

另外,可以修改状态栏应用图标之间的间距,这样状态栏就能容纳更多的图标了,例如

1
defaults -currentHost write -globalDomain NSStatusItemSpacing -int 5

效果

1717746064016.jpg

finder

mac 中删除桌面上的图标

使用 command+退格键 即可删除选中的图标。

快速切换窗口

使用 ctrl+left/right 可以切换邻近的窗口,这对于开发时只需要使用常用的几个窗口非常有用快速。(恢复旧的类似于多窗口的行为,放弃类似于移动端一个应用覆盖屏幕的做法)

显示隐藏文件

command+shift+. 可以临时切换显示隐藏文件。

使用以下方法永久设置(似乎对浏览器出发的文件选择器未生效)

1
2
3
defaults write com.apple.finder AppleShowAllFiles -bool true # 显示隐藏文件
defaults write com.apple.finder AppleShowAllFiles -bool false # 不显示隐藏文件
killall Finder # 重启 Finder

1676374613271.png

如何粘贴文件路径

有时候复制了一个文件路径,希望能快速在 finder 中打开,可以使用 command+shift+g 快捷键,然后粘贴路径即可。

1676374734148.png

在当前目录打开终端或 vscode

选中目录后,从 访达 => 服务 => New iTerm2 Window Here 即可。

1676352594802.png

这其实和期望中的打开当前目录有所区别,而且也比较慢。

好吧,其实右键菜单的二级菜单中也有。

1676366846045.png

打开 iTerm2 第一次会有两个终端,这看起来是个 bug。


可以使用 szContext 来自定义右键菜单。

修改文件的默认打开程序

  1. 在 Finder 中右键点击一个该类型的文件,调出菜单
  2. 在菜单中选择” 显示简介”(Get Info) 选项
  3. 在弹出的对话框中,展开” 打开方式”(Open With) 选项
  4. 选择你要改变的默认打开程序,并点击下方的” 全部更改…“(Change All)

1676366713119.png

选中打开应用程序时的 始终以此种方式打开 选项很迷惑,没想到是只针对这个文件的。
1676612397276.png

一个更好的工具是 duti,它可以获取或设置指定类型文件的默认程序,这对批量修改 xcode 打开的文件类型为 vscode 很有帮助。

1
2
3
4
5
6
7
8
9
10
11
12
# https://github.com/moretension/duti
brew install duti
# from https://github.com/vscode-icons/vscode-icons/blob/74220b6f8389ad5c5d9f68b2029d91460de2b374/src/iconsManifest/languages.ts#L319
filetypes=(.as .ada .prw .affect .al .ansible .g4 .any .htaccess .cls .apib .apl .applescript .adoc .asp .asm .ats .ahk .au3 .avcs .azcli .azure-pipelines.yml .bal .bat .bats .bzl .bf .bicep .bib .biml .blade.php .blitzbasic .bolt .bsq .buf.yaml .c .cal .cabal .Caddyfile .casc .cddl .ceylon .cfc .cfm .clojure .clojurescript .yml .cmake .CMakeCache.txt .cbl .ql .coffee .cfml .confluence .ckbk .cpp .h .cr .cs .css .feature .cu .pyx .dal .dart .dhall .html .diff .d .dockerfile .dtx .env .dot .dox .drl .dust .dylan .earthfile .edge .eex .es .ex .elm .erb .erl .yaml .falcon .fql .f .ftl .fs .fthtml .gspec .gml .gcode .gen .git .glsl .glyphs .gp .go .api .gd .gr .gql .gv .groovy .haml .hbs .prg .hs .haxe .hcl .helm.tpl .hjson .hlsl .hosts .http .aff .hy .hypr .icl .imba .4gl .ini .ink .iss .io .janet .java .js .jsx .jekyll .jenkins .jinja .json .jsonc .jsonnet .json5 .jl .id .k .kv .ks .kt ..kusto .tex .lat .less .flex .ly .lisp .lhs .log .lol .lsl .lua .mk .md .marko .mat .ms .mdx .mediawiki .mel .mmd .meson.build .mjml .pq .ep .mongo .mson .ne .nim .nimble .nix .nsi .nunjucks .m .mm .ml .o3 .w .things .pas .pddl .plan .happenings .pl .pl6 .pgsql .php .pine .requirements.txt .txt .dbgasm .ddl .polymer .pony .pcss .ps1 .prisma .pde .pro .rules .properties .proto .pug .pp .purs .arr .py .pyowo .qvs .qml .qs .r .rkt .cshtml .raml .re .red .res .rst .rex .tag .rmd .robot .rb .rs .san .sas .sbt .scad .scala .sce .scss .sdl .shader .sh .slang .ice .slim .ss .sn .eskip .tpl .snort .sol .rq .sqf .sql .nut .stan .bazel .do .stencil .html.stencil .st.css .styled .styl .svelte .swagger .swift .swig .link .sv .tt .teal .tt3 .tera .tf .sty .textile .JSON-tmLanguage .YAML-tmLanguage .Tiltfile .toit .toml .ttcn3 .tuc .twig .ts .tsx .typoscript .u .vb .wsf .vm .v .vhdl .vim .volt .vue .wai .wasm .wy .wgsl .wt .wl .wurst .wxml .xmake.lua .xml .xquery .xsl .bison .yang .zig)

for filetype in "${filetypes[@]}"
do
duti -s com.microsoft.VSCode $filetype all
if [ $? -ne 0 ]; then
echo "Failed to set default program for $filetype"
fi
done

如何重命名文件

选中文件后按下 Enter 重命名,或者右键菜单中选择 Rename。

如何剪切文件

好吧,它必须使用 command+c 然后通过 command+option+v 来移动文件,这是 mac only,甚至 mac 上的其他程序都支持 command+x。

第三方增强工具 XtraFinder 并不支持 m1,ref: https://www.zhihu.com/question/19579070

如何使用快捷键新建访达窗口

在 finder 中使用 cmd+n 创建窗口,不像 ctrl+e 可以特别方便一只手完成。

如何批量复制文件名

好吧,只需要多选 cmd+c 然后在文本编辑器中粘贴即可得到文件名,不需要任何特殊工具。ref: https://zhuanlan.zhihu.com/p/71065439

如何关闭所有访达窗口

在访达窗口按 option+command+w 关闭当前应用的所有窗口。

应用

视频播放器

在 windows 上基本上都是使用 potplayer,强大而简单。mac 上似乎不支持,所以使用了一个开源工具 iina,控制条稍微有点奇怪,但支持通过键盘控制进度倒也还好。
1676612583239.png

音乐播放器

虽然 iina 也支持播放音乐,但还是找了一个开源的音乐播放器 museeks
1676374490873.png

剪切板历史管理

使用开源程序 Maccy 管理即可,github: https://github.com/p0deje/Maccy

如何转换 wav+cue 为 flac

使用 Medihuman Audio Converter 即可,参考:https://www.reddit.com/r/audiophile/comments/s7ftf3/help_with_cue_splitter_program_for_mac/

沙盒工具使用什么

Parallels 可以安装 windows,但 $80 实在是有点贵。


使用 utm 解决,注意 windows 11 arm 下载有点麻烦,从 uup dump 下载转换必须使用 windows 系统,分享一个合并好的 iso 文件,ref: https://pan.baidu.com/s/1wDPVJRNP27dMv2s1f74TlQ#4qx8

效果

1677551846575.png

如何录制 gif

使用开源工具 kap 替代 windows 中的 ScreenToGif,不支持裁剪和缩放时间轴但基本能用(尤其是选择应用窗口的功能,屏幕录制相关工具不支持实在是太蠢)。

开发

mac 上禁用或修改系统的快捷键

首先是 ctrl+space,这是输入法的切换快捷键,在 快捷键 => 输入法 中可以修改
1675940507249.png

然后是 ctrl+command+space,默认是唤出 emoji 菜单,在 快捷键 => App 快捷键,修改为一个复杂的不常用的快捷键。
1675940701125.png

禁用 command+alt+m 最小化窗口的快捷键,同样在 快捷键 => App 快捷键,修改为一个复杂的不常用的快捷键。
1676524787758.png

关闭 cmd+shift+c 创建终端的快捷键,它很容易与浏览器的快捷键冲突。– 这其实是 VSCode 的快捷键。
1676524787759.jpg

如何使用类似 ctrl+home/ctrl+end 的快捷键跳转光标

默认情况下 mac 上移动光标的快捷键是

使用 command+home/end 跳转到行(段落)开头/行(段落)结尾
使用 option+left/right 跳转到上一个单词开头/下一个单词段落结尾
使用 command+top/bottom 跳转到文本开始/文本结尾

以上按键都可以与 shift 配合使用。


vscode 中 command+bottom 被 idea 快捷键绑定 editor.action.goToDeclaration 占用了,需要禁用掉它。

配置终端命令行提示

使用 iterm2oh-my-zsh 即可。

vscode 中无法使用 Run Script 的功能

错误 The terminal process "/bin/zsh '-c', 'pnpm run dev'" failed to launch (exit code: 127).

安装 iter2 和 oh-my-zsh 后解决,奇怪的。

git pull 拉取代码时自动合并

目前使用 git pull 时总是会提示让输入 commit msg,但应该有配置可以禁用这个行为。

1
2
git config --global branch.autosetupmerge always
git config --global branch.autosetuprebase always

ref: https://stackoverflow.com/questions/5480069/

未生效

vscode 切换标签页

好吧,idea 在 windows 平台上默认的 alt+left/right 与 macos 本身的光标跳转有冲突。只能使用以下快捷键缓解这个问题

  • command+shift+n 打开文件 – 这是 jetbrains ide 的快捷键
  • command+alt+left/right 在打开的文件中将光标后退/前进到下一个位置
  • ctrl+tab 切换标签页(显然,这个快捷键用起来不是特别好按)

禁止按住 alt 会输入特殊字符

遗憾的是,这个问题似乎同样无法解决,这是 mac 内置输入法的行为且找不到设置修改。

启动 android studio 时声音会变的很奇怪

禁用虚拟机的声音

1
2
hw.audioInput = no
hw.audioOutput = no

可以使用以下脚本禁用所有虚拟机的声音

1
2
3
4
5
6
7
8
9
#!/bin/bash
find ~/.android/avd -name "config.ini" | while read line
do
awk '!/audio/' $line > tmp
rm $line
mv tmp $line
echo "hw.audioInput = no" >> $line
echo "hw.audioOutput = no" >> $line
done

然后清理数据冷重启虚拟机。
1677133915491.png

修改 hosts 文件

1
sudo code /etc/hosts

ref: https://www.jianshu.com/p/752211238c1b

禁用 mac 上自动创建 .DS_Store 文件

自从使用 mac 之后,很容易在 git 提交时看到这个文件,而且位置不定,很烦。所以期望禁用它,以下是 chatgpt 的答案

你可以在终端中输入以下命令,禁用 macOS 自动创建 .DS_Store 文件:

1
defaults write com.apple.desktopservices DSDontWriteNetworkStores true

这将使 macOS 不会在网络卷上创建 .DS_Store 文件。如果你想禁止 macOS 在本地文件夹中创建 .DS_Store 文件,你可以在终端中输入另一行命令:

1
defaults write com.apple.desktopservices DSDontWriteStores true

为了使这些更改生效,你需要注销并重新登录你的 macOS 帐户。如果你想重新启用创建 .DS_Store 文件的功能,可以将以上两个命令中的 “true” 替换为 “false”,并再次注销并重新登录你的系统帐户。

配置 iterm2 终端快捷键

神奇的是,mac 上使用广泛的终端工具的行内移动光标快捷键和 mac 默认的并不一致。期望的和 mac 一致的是

  • cmd+left 移动到行首
  • cmd+right 移动到行尾
  • option+left 移动到单词首
  • option+right 移动到单词尾

这需要修改 Key Mappings Preset

Key Mappings Preset

ref: https://superuser.com/a/1157575/1078727

clash-verge 配置自定义规则

  1. 新建一个 Merge 配置
    Merge

  2. 添加 prepend-rules,配置特定网站使用特定代理,例如

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # Merge Template for clash verge
    # The `Merge` format used to enhance profile

    prepend-rules:
    - 'DOMAIN,ipaddress.my,🇺🇸 USA Seattle 01'
    - 'DOMAIN-SUFFIX,google.com,🇺🇸 USA Seattle 01'

    prepend-proxies:

    prepend-proxy-groups:

    append-rules:

    append-proxies:

    append-proxy-groups:
  3. 然后它就会自动合并到托管配置中,非常简单

关闭 iterm2 每次关闭都要确认的提示

在 Settings => General => Closing 中可以找到这些选项

提示信息.jpg

jetbrains ide 中输入法的主题不能跟随系统

目前系统主题为暗色,但输入法主题是亮色,似乎是 jetbrains ide 的 bug,只能退出重开 ide。相关 issue: https://youtrack.jetbrains.com/issue/IDEA-252482/

如何创建 icns 图标文件

创建 mac app 并发布必须要使用指定的 icon。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1. 准备最大尺寸 1024x1024 图片一张,重命名为 icon.png,其他大小尺寸可以通过终端命令生成;
# 2. 通过鼠标右键或者命令,创建一个名为 icons.iconset 的文件夹
mkdir icons.iconset
# 3. 通过” 终端 “来快速创建各种不同尺寸要求的图片文件
sips -z 16 16 icon.png -o icons.iconset/icon_16x16.png
sips -z 32 32 icon.png -o icons.iconset/[email protected]
sips -z 32 32 icon.png -o icons.iconset/icon_32x32.png
sips -z 64 64 icon.png -o icons.iconset/[email protected]
sips -z 128 128 icon.png -o icons.iconset/icon_128x128.png
sips -z 256 256 icon.png -o icons.iconset/[email protected]
sips -z 256 256 icon.png -o icons.iconset/icon_256x256.png
sips -z 512 512 icon.png -o icons.iconset/[email protected]
sips -z 512 512 icon.png -o icons.iconset/icon_512x512.png
sips -z 1024 1024 icon.png -o icons.iconset/[email protected]
# 4. 终端中运行下面的命令,就可以获得名为 icon.icns 的图标文件了
iconutil -c icns icons.iconset -o icon.icns

注意:icon.png 图片文件和 icons.iconset 文件夹要保存在同一级目录下,” 终端 “启动后切换到相同目录。

ref: https://zhuanlan.zhihu.com/p/348599140


mac 初上手的疑问与困惑
https://blog.rxliuli.com/p/88862964f94e4bdca5c97a5a2581898a/
作者
rxliuli
发布于
2023年2月9日
许可协议