Lispy 基本介紹

Lispy 簡介

  • 是一個在 Emacs 中方便操作 LISP 程式碼的套件,這套知名操作方式來自於另一個套件 Paredit
  • 重點優勢來自於其較短的熱鍵綁定
  • 透過把游標至於括號處並只需輸入 a-z 或 A-Z 即可執行 100 種以上的操作
  • 也由於這樣短小的綁定,所以只能在括號處才能進行操作(在括號內也得先跳至括號才能操作)
  • 如果你目前正在使用 Paredit 那 Lispy 也可以同時使用,只有非常少的衝突和部分的重複

和 vi 的關係是?

  • Lispy 的熱鍵綁定的預設按鍵,啟發自 vi 的操作
  • 最重要的關鍵來自於,LISP 的程式碼並不會有:
j(progn
    (forward-char 1))k
  • 所以 vi 的操作可以在不切換 mode 的特別 (Special) 情況下,在括號處直接使用
  • 同時也啟發了許多其他對括號的操作方式

lispy tutor 入門教學

基本定義

  • Point - 目前游標所處的位置
  • Opener - 所有左括號(如 (, [, { )
  • Closer - 所有又括號(如 ), ], } )
  • Short Binding - 單鍵操作括號
  • Special - 當游標所處的位置處在左括號處或右括號後一格時

lispy-flow

  • 首先將游標位置至於起始處的左括號位置
  • f 就會跳出 f ,然後迅速消失並跳到下一個左括號
  • 請留意,並非是跳掉右括號,而是跳到下一個左括號

lispy-flow

lispy-flow-1.gif

lispy-flow

  • 切換到你所想要編輯的那組括號時,按 C-f 可跳入括號內編輯
  • 當編輯完畢,可按 [ 跳回當前的左括號處,進行其他 lispy 的操作

lispy-flow

lispy-flow-2.gif

lispy-different

  • 當游標在左或右括號處,按 d 就能在左右括號處跳換
  • 可以藉由 fd 練習在一群左右括號中做循環的跳轉
  • 當游標在右括號時, f 是以往前一個括號的方式轉換

lispy-different

lispy-different-1.gif

lispy-forward / backward

  • [] 可以在括號內跳轉到左右括號處
  • 如果游標已經在括號處,則會在同一層級的同側括號跳轉
  • 跳轉方向正巧與 f 的方向相反

lispy-forward / backward

lispy-forward-backward-1.gif

lispy-clone / delete

  • 在左括號處按 c 會立即複製貼上當前括號內容
  • 一樣在左括號處按 Ctrl+d 會刪除當前括號內容
  • 當在更高層級內不斷刪除,最終括號內沒有東西之後,就會往上個層級刪除括號

lispy-clone / delete

lispy-clone-delete-1.gif

lispy-append

  • 若要對一個括號進行首尾處的新增與修改:
  • 2+SPC 會跳到括號內起始處方便編輯
  • 3+SPC 會跳到括號內末尾處方便編輯
  • 4+SPC 當我們要在末尾處大量修改時,可以新建一空白行方便編輯

lispy-append

lispy-append-1.gif

lispy-view /narrow / widen

  • 在左括號處按 v 即可將目前括號對準視窗第一行
  • 按兩次 v 即可恢復原本位置
  • N 即可隱藏其他括號內容,專注當前括號編輯
  • W 即可恢復被隱藏之隱藏內容

lispy-view / narrow / widen

lispy-view-narrow-widen-1.gif

lispy 深入操作

lispy-join

  • 在左括號內按 + 即可將當前括號,和同一層級的括號合併

lispy-join

lispy-join-1.gif

lispy-barf / slurp

  • < 會將括號中的東西吐 (barf) 出來
  • 當在左括號處按 < 括號會往右移動,將第一個元素移出括號
  • 當在右括號處按 < 括號會往左移動,將最後一個元素移出括號
  • 同理,=>= 會將括號外的東西吃進來 (slurp)
  • 要特別留意 <> 在左右括號時的不同操作

lispy-barf /slurp

lispy-barf-slurp-1.gif

lispy-undo / repeat

  • 進行了單一的括號操作後,可使用 . 重覆同樣的操作
  • 同樣道理,也可以使用 u 對任何操作進行 undo

lispy-undo / repeat

lispy-undo-repeat-1.gif

lispy-oneline / alt-multiline

  • O 即可將括號內容,變成單一一行
  • M 則可將括號內容展開為多航表示

lispy-oneline / alt-multiline

lispy-oneline-multiline-1.gif

lispy-occur

  • 在 lispy 中也可以有類似 occur 的功能
  • y 即可進入 occur 模式
  • C-g 即可脫離 occur 模式

lispy-occur

lispy-occur-1.gif

lispy-follow

  • 在 lispy 中可以查詢定義好的 macro
  • F 即會開啟對應 macro 的位置檔案
  • 沒有對應 macro 則可指定給他一個路徑

lispy-follow

lispy-follow-1.gif

lispy-convolute

  • 在左括號處可以按 C 將後續括號對齊目前位置
  • 搭配 undo 調整出合適的對齊方式

lispy-convolute

lispy-convolute-1.gif

lispy-ace-paren / ace-char

  • 在左括號處按 q 即會標示出所有括號起始處,選擇標示即可讓跳躍到該處
  • Q 則是可標示出符合輸入字母的位置,選擇標示即可跳躍到該處

lispy-ace-paren / ace-char

lispy-ace-paren-char-1.gif

lispy-ace-symbol / ace-subword / ace-replace

  • 在左括號處按 a 即可跳至標示處並向後選取
  • - 則是跳至標示處向前選取
  • 兩者的選取都只能在括號內向下層級去選取,所以得先切換到你要處理的括號位置
  • H 如同 a- 一樣,不過會把標示刪除留下空格

lispy-ace-symbol / ace-subword / ace-replace

lispy-ace-symobol-subword.gif

Thank You