キーバインド(KeyBindings)の設定でTextExpanderっぽいことができる

  • 投稿日:
  • by
  • カテゴリ:

ザリガニが見ていた...。さんで書かれている、
以下の記事を読んでみたところ、
キーバインド(KeyBindings)の設定をすることで、
爆速でHTMLのタグ打ちができる

ということがわかった。
TextExpanderっぽいことを、無料でできるという感じ。

ただ、TextExpanderは、設定すれば日本語入力モードでも動作するが、
この方法は英数入力モードでないと動作しないっぽい。

タグで囲むキーバインド設定の方針

私がよくやるタグうちは、以下のようなもの。

  1. 選択範囲を<strong></strong> タグで囲む
  2. 選択範囲を<p></p> タグで囲む
  3. 選択範囲を<blockquote><div></div></blockquote> タグで囲む
  4. 選択範囲を<ul></ul>タグで囲む。できれば各行を<li></li>タグで囲みたい
  5. 選択範囲を<ol></ol>タグで囲む。できれば各行を<li></li>タグで囲みたい

3. までは、AppleScriptもAutomatorも使わずにタグやカッコで囲うキーバインドの設定 - ザリガニが見ていた...。のソースに「insertNewline:」を混ぜるだけで望みのものができた。

問題は4.と5.。
AppleScriptを使えれば、繰り返し処理とか置換とかできるが、
scriptじゃないのでできなさそう。困ったなぁ。

しょうがないので、次のようなステップを踏む。
・選択範囲を<ul></ul>タグで囲む ・各行を<li></li>タグで囲む

確かに5秒はかからずできそうな気がするが...うーん、微妙。
改善の余地あり。

成果物

{

"^:" = {

/* 選択範囲を<strong> </strong> で囲う(control-:、s) */
"s" = (
"setMark:",
"deleteToMark:",
"insertText:", "<strong>", "yank:", "insertText:", "</strong>",
);
/* 選択範囲を<ul> </ul>で囲う(control-:、u) */
"u" = (
"setMark:",
"deleteToMark:",
"insertText:", "<ul>",
"insertNewline:",
"yank:",
"insertNewline:",
"insertText:", "</ul>",
);
/* 選択範囲を<ol> </ol>で囲う(control-:、o) */
"o" = (
"setMark:",
"deleteToMark:",
"insertText:", "<ol>",
"insertNewline:",
"yank:",
"insertNewline:",
"insertText:", "</ol>",
);
/* 選択範囲を<p> </p>で囲う(control-:、p) */
"p" = (
"setMark:",
"deleteToMark:",
"insertText:", "<p>",
"insertNewline:",
"yank:",
"insertNewline:",
"insertText:", "</p>",
);

/* 選択範囲を<blockquote><div> </div></blockquote>で囲う(control-:、q) */
"q" = (
"setMark:",
"deleteToMark:",
"insertText:", "<blockquote>",
"insertNewline:",
"insertText:", "<div>",
"insertNewline:",
"yank:",
"insertNewline:",
"insertText:", "</div>",
"insertNewline:",
"insertText:", "</blockquote>",
"insertNewline:",
);

/* カーソルがある行を<li> </li>で囲う(control-:、l) */
"l" = (
"selectParagraph:",
/* selectLineだと複数行にまたぐ行が分解されてしまう */
"setMark:",
"deleteToMark:",
"insertTab:",
"insertText:", "<li>", "yank:",
"deleteBackward:","insertText:", "</li>",
"insertNewline:",
);
};
}

インストール方法は以下の通り。 この内容を、文字コードUTF-8のテキストファイルとしてとして、
以下のパスに保存する。

以下のファイルをホームのライブラリに保存する。
~/Library/KeyBindings/DefaultKeyBinding.dict
KeyBindingsフォルダが存在しない場合は自分で追加する。

デフォルト設定でテキストシステムの底力を引き出す - ザリガニが見ていた...。

既にファイルがある場合は、一番外側の{}の中身を、
ファイルの一番外側の{}の中に付け加える。

細かいコツなど

・呼び出しを「Ctrl+/」ではなく「Ctrl+:」にした
「:」の方がホームポジションに近いので、コンマ何秒か早い

・半角英数入力モードでしか効かない
日本語入力モードでは効かない。地味に大きな制約。

・DefaultKeyBinding.dictの変更を反映させるには?
使っているアプリを再起動でOK

・繰り返し設定
全ユーザーにオススメ。ぜひやるべき。アプリ再起動で反映される?

NSRepeatCountBinding

# 任意設定:control-u にする場合
defaults write -g NSRepeatCountBinding -string "^u"

# デフォルト設定:なし
defaults delete -g NSRepeatCountBinding

デフォルト設定でテキストシステムの底力を引き出す - ザリガニが見ていた...。

ただし、Ctrl-u , 5 , Ctrl-d とかやっても、10文字削除されない。 その後aとか入力すると、aが10個入力される。 「Ctrl押しながらのキー操作」は繰り返し処理できないっぽい?


まとめ:

  • キーバインドの設定により、とてもすばやいタグ整形が可能
  • スクリプト言語ではないので複雑なことはできない
  • 設定したキーバインドは英数入力モードでないと効かない

制約はあるものの、この圧倒的な速度は魅力。
もうAutomatorには戻れない体になってしまいました!