Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Emacsで""や()で囲まれたところを一瞬で消してくれるやつを書きました(vimでいうci"とかci(とかciw)

More than 3 years have passed since last update.

皆さんこんにちは.

僕は普段,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で見たほうが早いです.

circleanimationmuvie

こんな感じで"とか入れ子の括弧も綺麗に消せます.
後ろのかっこのほうにいても消せます.(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 さんからのご指摘を受け,"で囲まれた(を無視するようにいたしました.
ご教授いただき,ありがとうございました.

TakumaMatsushita
しょぼい学生 SwiftとLispとHaskellが好き!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away