Structural Editing

Lisp系のプログラミング言語を括弧の構造を保ったまま効率的に編集するためのエディタの機能.

📝Slurp/Barf

LISP系の言語の編集で大事な概念だけど情報が少ないのでまとめる.

  • Slurp: 吸い込む. カッコの中に入れる.
    • Slurp Forward
    • Slurp Backward
  • Barf: 吐き出す. カッコの中から出す.
    • Barf Forward
    • Barf Backward

とくにSlurp Forward, Barf Forwardをまず覚える.

以下はCalvaのページだけど動作についてはgif付きでわかりやすい.

Paredit, a Visual Guide - Calva User Guide

Tools

🔧smartparens

https://github.com/Fuco1/smartparens

EmacsでS式を操作する.

pareditよりもsmartparensのほうが最近登場したようなのでこちらをつかう.

doom emacsの default設定

  • (, [, {などで自動で閉じカッコが挿入される.
  • block movement
    • ()の中で)を入力すると,現在の)の末尾に飛ぶ.
    • []の中で]を入力すると,現在の]の末尾に飛ぶ.
  • Navigation
    • C-M-a: sp-beggining-of-sexp 現在のS式の先頭へ移動.
    • C-M-e: sp-end-of-sexp現在のS式の末尾へ移動.
    • C-M-f: sp-forward-sexp 次のS式に移動
    • C-M-b: sp-backward-sexp 前のS式に移動
    • C-M-d: sp-donw-sexp 現在のS式のひとつ内側のS式の先頭へ移動.
      • sp-backward-down-sexp: 現在のS式のひとつ内側のS式の末尾へ移動.
    • C-M-u: sp-up-sexp 現在のS式のひとつ外側のS式の末尾へ移動.
    • C-M-n: sp-next-sexp
    • C-M-p: sp-previous-sexp
  • Editing
    • C-M-SPC: S式内部をマーク(選択).
    • C-M-k: sp-kill-sexp 現在のS式の内側を削除.
      • 現在値の前後を考慮して削除してくれるのは頭いい.
      • symbolやwordを加味して頭良く削除してくれる.
      • sp-delete-symbol: at-pointのシンボルを削除.
      • sp-delete-wordだと現在値から後ろしか削除されない.
    • C-M-t: sp-transpose-sexp
  • wrapping/unwrapping
    • C-M-Spaceで現在の部分からwordの末尾までをマーク.
      • (とか[でマークした部分を囲む.
    • C-M-: sp-splice-sexp
      • 現在の部分の前のS式もろとも削除.
  • slurp/barf

この5つを覚えるだけで、作業効率が上がりおすすめされている.

  • Slurp (隣の括弧を吸い込む)
  • Barf (括弧を追い出す)
  • カット (括弧単位でのカット)
  • コピー (括弧単位でのコピー)
  • 削除 (括弧を丸ごと消す)

ref: いまどきのClojureのはじめかた - 紙箱

🔗References