2016年7月3日日曜日

Emacs カッコの自動挿入で困っている方へ

閉じカッコの自動挿入は便利なのに・・・

Emacs では、カッコを書く時に自動的に閉じカッコを挿入してくれる設定があります。(リンク:Emacs 閉じカッコの自動挿入)

開きカッコ "(" を書くと自動で閉じカッコ ")" を書いてくれて、更にカーソルはカッコの中にあるのですぐに中身を書き始められます。

自動挿入でなかった時には、カーソルを行ったり来たりさせていたのがなくなってスムーズに書けるようになり、絶対に外せない機能です。


これは、何もないところにカッコを書き始める場合は非常に便利な機能です。

でも、すでに中身が書いてある所でそれをカッコでくくろうとすると、とたんに煩わしい機能になります。

カッコでくくりたい部分の先頭にカーソルを持ってきてカッコを書くとこんな風になります。

 y = ()a + b * c          // y = (a + b) * c と書きたいのに・・・


"M-(" で解決

これを解決するのが、リージョンを選択して M-( です。

上の場合だと、a + b の部分を選択して、M-( すると (a + b) になります。

直観的で非常に良いアイデアだと思います。

でも、惜しむらくは、()カッコにしか対応していないところです。

ダブルクォーテーションに対応した、M-" はないのか・・・。



別のアプローチ

方針は違うのですが、こんな対策を考えてみました。

「() カッコを書くとカーソルを () の中に持ってきてくれる。」

() カッコは自分で書きます。実は、閉じカッコを書くのが面倒くさいのではなくてカーソルをカッコの中に戻すのが面倒なのではないかという発想です。

よろしければ使ってみてください。 () と {} と [] と <> と "" と '' に対応しています。

https://github.com/tbhby39g/backalittle.el


インストールするには、backalittle.el を load-path のフォルダ(例えば、~/.emacs.d/lisp/)に置いて、.emacs(または、init.el) に (require 'backalittle) を書き加えれば OK です。

これを使う場合は、electric-pair-mode (or その他のカッコ自動挿入機能)は無効にしておいてください。


リンク: Emacs 閉じカッコの自動挿入
リンク: https://github.com/tbhby39g/backalittle.el

2015年6月26日金曜日

Project Euler 始めました。

Ruby 勉強中です。

最近話題になった「1時間以内にこの問題を解けなきゃソフトウェアエンジニアじゃない、5つの問題」を勉強がてら Ruby でチャレンジして、それ以来、いろいろな問題を解くのがマイブームになっています。

そんな中、ポッドキャストの「CodeLunch.fm」を聞いていて、"Project Euler" という数学問題サイトを知りました。


Project Euler では、2015. 6. 25 現在、521問が出題されています。

最新の 521問目は数日前の 6/21出題です。第1問は2001年なので14年も続いている長寿サイトです。

丁寧なサイトで、問題を説いてサブミットし正解なら解説の PDF がダウンロードできたり、その問題のフォーラムがのぞけるようになります。

それから、問題を解いていくと賞がもらえて、僕は "Baby Steps" をもらいました。

現在、約50万人が登録していて、でも続けているのは少数のようで、123問まで解いている人が全体の1%です。ひとまず、1%以内に入るのが目標。

問題によっては、一見すると時間がかかりそうで、スクリプト言語ではなくてもっと速い言語にしようか、と思うものもあります。でも、頭のひねりが足りないだけで、ちゃんとしたアルゴリズムなら1分以内に解けるようにできているそうです。

いい頭の体操になります。

脳内の休眠中だったいろんな部分が活性化されている気がして、結構、燃えます。


リンク


2015年2月21日土曜日

Windows でもEmacs 魂は健在です

Emacs を使うのが楽しくなってくると、それに比例して Windows を使うのがつまらなくなってくる。

そんな気持ちを和らげてくれるのが「 keyhac 」というキー操作をカスタマイズできるソフトと Emacs 用の設定です。

作者の方、ありがとうございます。便利に使わせて頂いています。

Windows へのインストールと Emacs 用の設定は「Windows 7や8(64bit)で emacs キーバインドにする方法」を参考にしました。


keyhac を使ってみると

エディタだけではなくて、エクスプローラでファイルをコピー&ペーストするときにも M-w, C-y となって、思った以上に Emacs 化されてワクワクします。

もちろん IDE も Emacs のキーバインドになるので、IDE に元々付いている微妙な Emacs モードを使う必要はありません。

アプリケーションによっては、Emacs のキーバインドにしたくない場合もあると思います。

僕の場合は、ペイントをよく使うのですが、ペイントでは C-n は下へ移動ではなくて、標準の「新規ファイル」としておきたい。

こういう時は、設定ファイルの指定の場所に適用したくないアプリケーションの実行ファイル名を "mspaint.exe" のように書くだけでOKです。(場所は設定ファイルを見ればすぐに分かります。)


C-@ でマークする方に朗報です。

僕は、Emacs ではマークを C-@ で行っています。

上記の設定では、C-@ は英語キーボードではうまくいかないとのことでコメントアウトされています。

 ## 英語キーボードを利用する場合、LC-2 の設定(数引数の指定で利用)が LC-Atmark の設定で上書きされるのでコメント化
 #keymap_emacs["LC-Atmark"]     = reset_search(reset_counter(set_mark_command))

僕が使っているのは日本語キーボードなので、コメントアウトを外してみたのですが、うまく設定されませんでした。

以下の設定を追加すると、C-@ でマークできるようになりました。

keymap_emacs["LC-(192)"]     = reset_search(reset_counter(set_mark_command))

まとめ

keyhac を使うと Windows の操作が何でも Emacs 風になります。

人の心理とは面白いもので、たったこれだけのことで Windows を使うのが楽しくなり、仕事が楽しくなります。


リンク


2015年2月8日日曜日

Emacs "FooFooFoo" をプログラミングする

Software Design の1月号の記事で、「編集はプログラミングである 」というコラムがありました。(リンク:Vim に乗り換え!?

Vim では 「FooFooFoo」と書くには、3iFoo Esc とタイプすれば良いようです。

結果として FooFooFoo と得るために、行うのは 3iFoo Esc という入力である。「これはプログラムである」と考える。

FooFooFoo

FooFooFoo とそのままタイプするのは DRY の原則に反しており、プログラマとしては避けたい(?)

Emacs で FooFooFoo をプログラミングするにはどうするか? 次のような案はどうか?


1. "Foo M-del C-y C-y C-y"

【 説明 】

Foo とタイプしてそれを切り取って3回貼り付ける。

7ストロークのタイプになり、FooFooFooとタイプするより(9ストローク)も2ストローク少なくなる。(速いかどうかはともかく)

しかし、最後のC-y C-y C-y は同じことを3回やっていて依然としてDRY違反で、モヤモヤ感は残る。


M-3 C-y というようなイメージで貼付けを3回するようプログラミングしたい。

(M-数字 は次のコマンドや入力を数字回繰り返すコマンド)

しかし M-3 はこの場合は C-y に適用できない。


2. "C-x ( Foo C-x ) M-2 C-x e"

【 説明 】

C-x ( と C-x ) はマクロの定義。最後のC-x e がマクロの実行。

C-x ( と C-x ) の間の Foo という入力がマクロとして定義され、マクロの実行をM-2 で2回繰り返す。(定義した時に1回、Fooを入力しているのであと2回繰り返して計3つのFooが入力されたことになる。)

Fooという関数を切り出して、ループで2回実行しているようなイメージ。プログラミングをしているような感じがする。


マクロはショートカットがあるので、実はもっと簡単になる。

C-x ( は F3 キーに割り当てられていて、C-x ) はF4 キーに割り当てられている。

さらに、C-x )は繰り返しのコマンド "M-数字" が適用できて、この場合にはマクロを定義して即座に数字(-1)回分実行する。

まとめると以下の "プログラム" になる。

"F3 Foo M-3 F4" (6ストローク!!)


3. まとめ

あまり実用的ではない編集方法でした。

以下を覚えておくと、この駄文を最後まで読んだ意義があるかもしれません。

 1. M-del で後ろ向きに1単語 kill する。

 2. M-数字 コマンド でコマンドを "数字" 回繰り返す。

 3. マクロの定義、実行は意外と簡単(やってみるべき!)。定義にはショートカット(F3, F4)もある。


リンク

・Emacs manual - Keyboard Macros 17.1 Basic use

・Vim に乗り換え!?




2015年2月1日日曜日

Vim に乗り換え!?

Software Design の2015年1月号は Vim の特集でした。

Emacs を使っているので、普段は Vim の記事は読まないのですが、Vim を IDE のように使うという記事に惹かれてちょっと読み始めました。

Emacs を使っていても、もう少し IDE 的にしたいと感じていたので妙に熱心に読んでしまい、気がついたら Vim をインストールしてチュートリアルをやっていました。


もう Vim への乗り換えを決意して、チュートリアルも終わった後で、ふと1文字削除しようとして我に返りました。

1文字削除するには、「編集モードに移行して x キーを押す」なのか?

これは打ち間違えた時のコストが高すぎる!

・・・何でもコマンドですると思い込んでいて Backspace で消せることには思いが至りませんでした。

とにかく、勘違いにせよ冷静になれました。

Emacs も何でもできるので IDE 的にしたければ Emacs でやればいいだけでした。

一瞬だけの Vim 乗り換えでしたが、IDE 的に拡張したいポイントを考えるいいきっかけになりました。


***

特集のコラムで Vim の編集作業はプログラミングであると言っていました。

「3iFoo Esc」と "プログラム" すると「FooFooFoo」という結果が得られるという例が挙げられていました。

モードを切り替えて入力したり編集したりすると考えるのではなく、編集作業全体(3iFoo Esc)がプログラムで、結果としてある文字が入力されている、という考え方です。

面白い考え方と思いました。

Emacs は編集モードはありませんが、様々な編集のショートカットがあるので考え方は通ずるところがあると思います。


今、Emacs を使っていて編集機能を使いこなせているとは言いがたいので、もう少しチャレンジしてみようと思いました。

普段は読まない Vim 記事ですが、いい刺激が得られました。


Software Design (ソフトウェア デザイン) 2015年 01月号 [雑誌]



2015年1月18日日曜日

2015年の手帳

昨年に続き今年もフランクリン・プランナーの手帳にしました。

中身は特に変わりはないようですが、「段差をなくし、180度開いて使いやすく改良しました。」とメーカーが書いている通り、明らかに開きやすく改良されています。

あと、カバーにペン差しがついたのがありがたい。


と思っていたのですが、僕の3色ボールペンはサイズがペン差しにギリギリで入れにくいので使うのをやめました。

もう一つ不満を言うと、手帳のカバーにはポケットがあって、一週間の目標を書く短冊状のカードを入れるようになっているのですが、これが浅すぎて落ちそうで不安です。


以前に使っていたほぼ日手帳はつくづく良くできた作りだったと思います。

ペン差しにペンを差すと手帳が開かないように閉じられるのは本当に良い。


***

フランクリン・プランナーはカバーには不満なのですが、中身は自分には合っていて、とにかくやる気にさせてくれるので、今は手放せないです。

たぶん、「7つの習慣」を実践するように導いてくれたり、思い出させてくれるからだと思う。


***

実はこの手帳、カバー無しの中身だけでも入手できます。

この記事を書きながら気づいたのですが、中身をフランクリン・プランナーにして、カバーはほぼ日にすれば、これは僕にとって完全にベストな手帳です。

ただ、サイズが今年買ったB6サイズに合うものが、ほぼ日にはありません。A5サイズなら両方そろいます!

来年はこれだ! 来年が待ち遠しい!


リンク:フランクリン・プランナー オーガナイザー〈2015.4〉

リンク:手帳で気分転換(フランクリン・プランナー)

リンク:Amazon ダイアリー・綴じ手帳



2014年7月20日日曜日

⌘+クリックで1秒短縮(新しいタブで開く)

Chrome でリンク先を「新しいタブで開く」時は、⌘+クリック。

知らなかったので、久々の大物ライフハック。


今までは、

  1. リンクを2本指タップ、
  2. コンテキストメニューから「新しいタブで開く」を選択。

でも、2本指でタップしたつもりが1本指になっていてリンク先に移動してしまう、なんて事故も時々。


1秒くらいの時間短縮になるかな。

Safari でも同じ機能でした。FireFox でも同じでした。

Linux や Windows では、⌘でなくて Ctrl キーです。

実は業界標準ですか?