皆さんこんにちは.
僕は普段,emacsを使っていて一つだけ不満に思うことがありました.
それは,""や(),{}で囲まれた部分を一瞬で消せないところです.
ただし,vimではそれが可能です.
この消したい対象の内側のどこにいても消せるというのはすごく便利です.
これに相当するものを探してみたのですが,emacsではzap-to-charとかいう微妙なやつしか見つかりませんでした.
こいつはデフォルトでM-zで呼び出せるのですが,今いるカーソルのところから消されてしまいます.
例えば,"hello, world!"
とか書いてあったとして,カーソルが,
の位置にあったとします.
vimだとci"
とすれば,""
となります.すごい!
一方のemacs,zap-to-charくん,`"hello,'となってしまいます.残念!
あと,vimだと入れ子構造の括弧もいい感じに消してくれます.
これも再現したので後ほどgifでご覧ください.
vimのプラグインを入れてもよいのですが,それではemacsキーバインドまで食い尽くされてしまいます.
またインストールするのも巨大なパッケージになってたりして,扱いにくいんですよね.
それにともなって管理も面倒です.
というわけで書きました.
ciel.el
名付けてciel.el
です.
(ciだけではなくなったので少し名前を変えました)
というわけでご紹介.
言葉で説明するよりgifで見たほうが早いです.
こんな感じで"とか入れ子の括弧も綺麗に消せます.
後ろのかっこのほうにいても消せます.(gifの10行目あたりにいればmain()が消える)
あと,かっこのハイライトに合わせて,Emacs用に少し調整してます.
インストール
まずは,githubからcloneしてきます.
お好みのディレクトリに入れるために適当にcdしてください.
僕は.emacs.d
の中にelispというディレクトリを作っているのでそこに入れます.
cd ~/.emacs.d/elisp/
git clone https://github.com/cs14095/ciel.el
次にelファイルを編集しましょう.
init.elや.emacs.elに先ほどcloneしてきたディレクトリにパスを追加します.
最後にrequireしてキーバインドを設定すれば完成!
(setq load-path (cons "~/.emacs.d/elisp/ciel.el" load-path))
(require 'ciel)
(global-set-key "\C-ci" 'ciel-ci)
(global-set-key "\C-co" 'ciel-co)
melpaに登録されました!
package-list-packages
から選んでインストールするか、package-install-ciel
でできるはずです!
インストールしたら.elファイルに下記を追加したら使えます。
(global-set-key "\C-ci" 'ciel-ci)
(global-set-key "\C-co" 'ciel-co)
使い方
基本的にvimと同じです.
まだ作っていないものや,諸事情で対応していないものは順次対応予定です.
削除したものは全てkillリングに入るのでペースト可能です.
Ctrl-c, i, w => 単語を削除
Ctrl-c, i, ' => ''で囲まれた内側を削除
Ctrl-c, i, " => ""で囲まれた内側を削除
Ctrl-c, i, ` => ``で囲まれた内側を削除
Ctrl-c, i, [()] => ()で囲まれた内側を削除
Ctrl-c, i, [{}] => {}で囲まれた内側を削除
Ctrl-c, i, [<>] => <>で囲まれた内側を削除
Ctrl-c, i, [[]] => []で囲まれた内側を削除
かっこの入力は開き,閉じかっこどちらでもOK.
Ctrl-c, oにすれば削除の代わりにコピーもできます.
なんかちゃんと探せばありそう
なんか探せばもっとマシなものがありそうだけど,lispの良い練習になりました!
こっちのほうがよくね?とかバグってるとかあればコメントでお願いいたしますm(_ _)m
(追記)それっぽいのはあった
change-inner.elというものがありました.
ただ,こちらはexpand-region.elというパッケージを使用した上でコーディングしており,特定モードではうまく動かないという点があるようです.私の環境ではうまく動きませんでした.
ciel.el
はモードに左右されることはありませんし,vimとほぼ同様に動きます.
謝辞
@yuutayamada@github さんからのご指摘を受け,"で囲まれた(を無視するようにいたしました.
ご教授いただき,ありがとうございました.