snippet の置換部分を全部消した時

なんか中の人に催促するようで申し訳ないのだが調べてみた。

全部消した後で入力しても連動する部分が出てこない

 ("from" "from ${1:module} import ${2:symbol}${3/./ as }${3:alias}$0" nil 0)

なんてので

#展開した状態から
from module import obj as alias

#${3:alias} んとこを消して
from module import obj! # "alias" を消したんで " as " も消える

#「やっぱ alias つけとく」
from module import objsp! # " as " が出てこない

${n/regexp/format/} の前後が ${n:default} とかだとダメ?前か後ろに snippet で変わったりしない文字置いとけばだいじょぶっぽい。

削除したのに気付いてくれないことがあった(解決済み)

from module import obj as !alias # "alias" が選択状態

#から "alias" を消しても
from module import obj as ! # " as " が残ってちゃう

消し方によってちゃんと消えてくれたり残ったりする。

  • だいじょぶなの
    • delete-char-or-selection
    • backward-delete-char-untabify-or-selection
  • だめなの
    • py-electric-backspace
    • html+-backward-delete-char-untabify-or-selection
    • html+-delete-char-or-selection

モード特有のがダメなら *snippet-mode-map* の C-d とか書き換えちまえばいくね?とか思って snippet.l 見たら原因わかった。snippet-modify-command に登録してあるコマンドのときだけ動くのね。ちゃんとコメントついてるのに気付かんとは、まったく。
コマンドを登録するよりは *snippet-mode-map* の C-d と C-b*1, BS*2 を登録してあるやつにしとく方が楽そうなんでそうしといた。

;~/.xyzzy に
(define-key ed::*snippet-mode-map* #\C-d 'delete-char-or-selection)
(define-key ed::*snippet-mode-map* #\C-b 'backward-delete-char-untabify-or-selection)
(define-key ed::*snippet-mode-map* #\F24 'backward-delete-char-untabify-or-selection)

"ed::" つけないと *snippet-mode-map* なんかねーよって怒られた。

*1:C-h を他のことに使ってるんで代わりに C-b してる

*2:F24 で設定できるようにしてる