iTerm2筆記

weixin_34116110發表於2017-10-29

本文是 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)

  1. Keys
    • Keys -> Hotkey -> Show/hide all windows with a system-wide hotkey:如圖
      454976-db581166102fef55.png
      iterm2-hotkey
  2. Profiles
    • Profiles 點左下方的「+」建立一個新的 Profile,選擇 Window,然後修改 Style 為 Full-Width Bottom of Screen 或者 Full-Width Top of Screen,然後修改左下角 Other Actions... 為 Set as Default。此後,退出 iTerm2 當前終端視窗,新建一個 iTerm2 視窗,以後就能用 你在前面設定的熱鍵 Hotkey 來呼叫了:如圖
      454976-01590a01cfa7d349.png
      iterm2-profile

其他的 Profiles 設定備份

  • General

    • Working Directory
      • Reuse previous session's directory:每次開啟新的標籤頁、切割出新的 panel 時,重用切割來源的目錄位置。例如我在某個標籤頁中切換到了 ~/Documents,此時新建 tab,則新的 tab 開啟時就在 ~/Documents 下(若不如此修改,預設開啟時是在 ~ 下即 Home directory):如圖
        454976-39ffe94b8f145fa0.png
        iterm2-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 後,該關還是關,不知道是不是哪裡出了問題。。。

302 顯示命令執行時間

選單欄 View -> Show Timestamps

454976-e0bd62cb4f9df40f.png
iterm2-show-time-stamps

303 使用正規表示式搜尋

在終端視窗使用 cmd+f 進行搜尋時,點選搜尋框左側的下拉三角號,可以選擇使用正規表示式搜尋:

454976-ab0e66eaa63fbd5e.png
iterm2-regular-expression-search-regex

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 了。

454976-029832c52a26cd2d.png
修改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

有幾個坑,記錄一下:

  1. 在需要繫結 F11 時我發現總是展示桌面,無法輸入 F11。於是我在想可能是系統快捷鍵繫結了。於是在「系統偏好設定」->「鍵盤」中的「快捷鍵」->「排程中心」找到了 F11,暫時勾選掉該選項,於是能夠輸入 F11 了
  • 454976-9295ba51b7d56ed5.png
    暫時取消系統級F11快捷鍵
  1. 如果想繫結 Meta Key,見「#305 使用 emacs 模式進行行命令編輯」;如果不想繫結 Meta Key,按空格跳過
  2. 在繫結 insert 時,不知為啥,一直沒法輸入該鍵。但後來注意到一句話 Press Space to skip to the next key.,因此就決定按空格跳過該鍵的對映(反正這個鍵位對映主要是給命令列用的,而命令列中要做替換也不需要用到 insert——啟用了 vi-mode,用 Esc 然後 R 就行了阿~)
  3. 提醒:
    1. 不要提前輸入。例如在對映 F1 時就按 F1,等到跳出要求對映 F2 時再按 F2,而不要連續按 F1、F2。否則系統會認為 F1+F2 這個(順序?)組合鍵才是 F1
    2. 在發現對映錯誤時,如果還沒對映完,那就等 10 秒,程式會自己停止;然後重新 source ~/.zshrc 就能重新呼叫該 zkbd 進行鍵盤對映了;如果已經對映完,想改,那麼刪除 ~/.zkbd 資料夾下的對應配置檔案(類似 xterm-256color-apple-darwin17.0 字樣),然後重新 source ~/.zshrc 即可

0 八卦

【八卦01】由於 Mac OS 自帶的 terminal 沒有簡單的方法實現隨時隨地從螢幕上方「下拉」/「上拉」呼叫的功能(具體效果類似 Guake),我找到了 iTerm 2。雖然還是儘可能想避免非三平臺通用的軟體,不過權衡之後我覺得隨時隨地呼叫終端這件事更重要,至於過分依賴單平臺特用的軟體這種問題……後面具體使用時再看吧。

【八卦02】至於為什麼不用 Visor,那是因為它已經切換到 TotalTerminal 了,而後者……已經棄坑了。