本文是 iTerm2 的使用笔记,不定期更新。
1 注释说明
- 对于 Preferences 的修改,
=>
表示需要切换选项卡,->
表示在同一选项卡内
2 参考
https://www.iterm2.com/documentation.html
https://marcjenkins.co.uk/drop-down-terminal-with-iterm2/
https://www.zhihu.com/question/27447370
3 杂
301 如何随时随地一键调用 Quake-like iTerm2
首先声明:由于 Mac OS 本身对窗体「最大化」的设计,某个窗体最大化后似乎就独占这一屏幕了,因此貌似没法实现在已经最大化窗口的那个桌面上调用 iTerm2。
主要更改 Preferences 中的 2 个地方:(写作本文时,iTerm2 版本号为3.1.4)
- Keys
-
Keys -> Hotkey -> Show/hide all windows with a system-wide hotkey:如图
-
Keys -> Hotkey -> Show/hide all windows with a system-wide hotkey:如图
- Profiles
-
Profiles 点左下方的「+」创建一个新的 Profile,选择 Window,然后修改 Style 为 Full-Width Bottom of Screen 或者 Full-Width Top of Screen,然后修改左下角 Other Actions... 为 Set as Default。此后,退出 iTerm2 当前终端窗口,新建一个 iTerm2 窗口,以后就能用 你在前面设置的热键 Hotkey 来调用了:如图
-
Profiles 点左下方的「+」创建一个新的 Profile,选择 Window,然后修改 Style 为 Full-Width Bottom of Screen 或者 Full-Width Top of Screen,然后修改左下角 Other Actions... 为 Set as Default。此后,退出 iTerm2 当前终端窗口,新建一个 iTerm2 窗口,以后就能用 你在前面设置的热键 Hotkey 来调用了:如图
其他的 Profiles 设置备份
-
General
- Working Directory
- Reuse previous session's directory:每次打开新的标签页、切割出新的 panel 时,重用切割来源的目录位置。例如我在某个标签页中切换到了
~/Documents
,此时新建 tab,则新的 tab 打开时就在~/Documents
下(若不如此修改,默认打开时是在~
下即 Home directory):如图
- Reuse previous session's directory:每次打开新的标签页、切割出新的 panel 时,重用切割来源的目录位置。例如我在某个标签页中切换到了
- Working Directory
-
Text
- 在使用 agnoster 作为 zsh 主题的情况下,更改字体为 Font -> Change Font -> All Fonts -> 12 pt Meslo LG S DZ Regular for Powerline
-
Session
- Closing -> Always Prompt before closing
- 注:Prompt before closing if there are jobs running besides 似乎不起作用……例如我添加了 vim 或 top 后,该关还是关,不知道是不是哪里出了问题。。。
- Closing -> Always Prompt before closing
302 显示命令执行时间
菜单栏 View -> Show Timestamps
303 使用正则表达式搜索
在终端窗口使用 cmd+f 进行搜索时,点选搜索框左侧的下拉三角号,可以选择使用正则表达式搜索:
304 无鼠标模式复制文本
打开 cmd+f 搜索文本,高亮光标标记了目标文本后,按 Tab 向右选择文本,按 Shift+Tab 向左选择文本,文本同时被复制到了搜索框中;选择足够的文本后,cmd+A 然后 cmd+c 即可完成复制
305 使用 emacs 模式进行行命令编辑
想在 iTerm2 中使用 emacs 模式进行行编辑如光标前单词删除、光标移动,需要使用 Alt 时,一直有问题;后来找到了该帖子,修改了 Preferences => Profiles -> [你自己的Profile] -> Keys,把其中的右 Option 键改为了 Meta 键,左 Option 改成了 Esc+。然后就能用左 Options 即普通键盘上的左 Alt 来使用普通键盘上的 Alt 了。
关于 shell 行编辑的快捷键,见 MIT 的一个文档,摘录常用的几个:
C- 表示 Ctrl 开头,M- 表示 Alt 开头
- 位置
- 行跳转
- C-a:跳转到行首
- C-e:跳转到行尾
- 单词跳转
- M-b:向光标左侧(行首方向)跳转 1 个单词
- M-f:向光标右侧(行尾方向)跳转 1 个单词
- 行跳转
- 编辑
- 行编辑
- C-k:删除至行尾
- C-w:删除光标左侧(光标与行首之间)最近的 1 个单词
- M-d:删除光标右侧(光标与行尾之间)最近的 1 个单词
- 行编辑
tip:
- C-a 中的 a 可理解为 stArt 中的 a;C-e 中的 e 可理解为 End 中的 e
- C-k 中的 k 可理解为 Kill 中的 k
- C-w 和 M-d 的位置正好一组在左,一组在右,可对应理解为删除左侧还是删除右侧
306 使用 vi 模式进行行命令编辑
如果你是原生 Mac 键盘党,这段可以无视;如果你是外接标准键盘党(即键盘上有功能键区 Insert/Delete/Home 等 6 个键),请往下看
改成 vi-mode 方式后,发现在 oh-my-zsh + iTerm2 + vi-mode 条件下进行行编辑的话,vi 模式快捷键不太方便,主要是说按 Home/End/Delete 等键总是会出问题。看到这个issue所说,好像是键位绑定问题。搜到了一个键位绑定修改方案:
# 修改键位绑定的代码
# 来源:https://bbs.archlinux.org/viewtopic.php?pid=201976#p201976
# 原始可能是:http://zshwiki.org/home/zle/bindkeys
autoload zkbd
[[ ! -f ${ZDOTDIR:-$HOME}/.zkbd/$TERM-$VENDOR-$OSTYPE ]] && zkbd
source ${ZDOTDIR:-$HOME}/.zkbd/$TERM-$VENDOR-$OSTYPE
[[ -n ${key[Backspace]} ]] && bindkey "${key[Backspace]}" backward-delete-char
[[ -n ${key[Insert]} ]] && bindkey "${key[Insert]}" overwrite-mode
[[ -n ${key[Home]} ]] && bindkey "${key[Home]}" beginning-of-line
[[ -n ${key[PageUp]} ]] && bindkey "${key[PageUp]}" up-line-or-history
[[ -n ${key[Delete]} ]] && bindkey "${key[Delete]}" delete-char
[[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line
[[ -n ${key[PageDown]} ]] && bindkey "${key[PageDown]}" down-line-or-history
[[ -n ${key[Up]} ]] && bindkey "${key[Up]}" up-line-or-search
[[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char
[[ -n ${key[Down]} ]] && bindkey "${key[Down]}" down-line-or-search
[[ -n ${key[Right]} ]] && bindkey "${key[Right]}" forward-char
有几个坑,记录一下:
- 在需要绑定 F11 时我发现总是展示桌面,无法输入 F11。于是我在想可能是系统快捷键绑定了。于是在「系统偏好设置」->「键盘」中的「快捷键」->「调度中心」找到了 F11,暂时勾选掉该选项,于是能够输入 F11 了
- 如果想绑定 Meta Key,见「#305 使用 emacs 模式进行行命令编辑」;如果不想绑定 Meta Key,按空格跳过
- 在绑定 insert 时,不知为啥,一直没法输入该键。但后来注意到一句话
Press Space to skip to the next key.
,因此就决定按空格跳过该键的映射(反正这个键位映射主要是给命令行用的,而命令行中要做替换也不需要用到 insert——启用了 vi-mode,用 Esc 然后 R 就行了阿~) - 提醒:
- 不要提前输入。例如在映射 F1 时就按 F1,等到跳出要求映射 F2 时再按 F2,而不要连续按 F1、F2。否则系统会认为 F1+F2 这个(顺序?)组合键才是 F1
- 在发现映射错误时,如果还没映射完,那就等 10 秒,程序会自己停止;然后重新
source ~/.zshrc
就能重新调用该 zkbd 进行键盘映射了;如果已经映射完,想改,那么删除~/.zkbd
文件夹下的对应配置文件(类似xterm-256color-apple-darwin17.0
字样),然后重新source ~/.zshrc
即可
0 八卦
【八卦01】由于 Mac OS 自带的 terminal 没有简单的方法实现随时随地从屏幕上方「下拉」/「上拉」调用的功能(具体效果类似 Guake),我找到了 iTerm 2。虽然还是尽可能想避免非三平台通用的软件,不过权衡之后我觉得随时随地调用终端这件事更重要,至于过分依赖单平台特用的软件这种问题……后面具体使用时再看吧。
【八卦02】至于为什么不用 Visor,那是因为它已经切换到 TotalTerminal 了,而后者……已经弃坑了。