PowerCMS X ブログ

2021-12-16

BBEditの便利な機能とカスタム・スクリプトの作成

この記事では PowerCMS Xについては触れませんが、PowerCMS Xの中の人である私が BBEdit を愛用しているので、Advent Calendar に便乗させていただきます :-)

コードや Markdown編集のエディタには何をお使いですか? 私は BBEdit (Mac) を利用しています。以前は TextWrangler を利用していました。BBEditは無料版でも基本的なエディタ機能は使えますが、TextWranglerの64bit版が出なかったこと、これだけ活用させてもらってるのだから、ということで Bare Bones Softwareのサイト 別ウィンドウで開きます(App Store版ではなく)で購入しました($49.99)。

BBEditのエディタ画面

カスタムスクリプトを追加する

BBEditでは、マークダウンのリアルタイムプレビューができます( Ctrl+Command+P )。PoweCMS Xのプラグインのドキュメントは Markdownで書くのですが、特殊文字のエスケープが面倒です。_とか - とか (とか、よく出てくるので。その他にも URLエンコードとか、HTMLのエスケープとか。

そこで、カスタムスクリプトを作成します。AppleScriptです。尚、スクリプトファイルの名前を「01)」「02)」などで始めると、その部分が表示順に反映されつつ、メニューから隠れてくれます。

BBEditのScriptメニュー

BBEdit で選択範囲を置き換える基本構文

tell application "BBEdit" -- 対象のアプリケーションを指定する
	set targetWin to window 1 -- アクティブなウィンドウを変数に入れる
	set selectionText to selection of targetWin as Unicode text -- 選択範囲のテキストを得る
--  何らかの処理
	set selection of targetWin to selectionText -- 選択範囲を置き換える
end tell

Markdownの特殊文字をエスケープする

  1. ~/Library/Application Support/BBEdit/Common ディレクトリを作成します。
  2. アプリケーション » ユーティリティ » スクリプトエディタ を開きます。
  3. 以下のスクリプトを ~/Library/Application Support/BBEdit/Common/TextReplacer.scpt として保存します。
--Text Replacer Module
on replace_all(theText, serchStr, replaceStr)
	set theDelim to AppleScript's text item delimiters
	set AppleScript's text item delimiters to serchStr
	set theList to every text item of theText
	set AppleScript's text item delimiters to replaceStr
	set theText to theList as string
	set AppleScript's text item delimiters to theDelim
	return theText
end replace_all
  1. 続いて、~/Library/Application Support/BBEdit/Scripts フォルダを開きます。
  2. 以下のスクリプトを「Markdown Escape.scpt」として保存します。
set libpath to path to library folder from user domain
set libpath to (libpath as Unicode text) & "Application Support:BBEdit:Common:TextReplacer.scpt"
set TextReplacer to load script file libpath
tell application "BBEdit"
	set targetWin to window 1
	set selectionText to selection of targetWin as Unicode text
	set selectionText to TextReplacer's replace_all(selectionText, "-", "\\-")
	set selectionText to TextReplacer's replace_all(selectionText, "(", "\\(")
        -- 中略
	set selectionText to TextReplacer's replace_all(selectionText, "[", "\\[")
	set selectionText to TextReplacer's replace_all(selectionText, "]", "\\]")
	set selection of targetWin to selectionText
end tell

PHPの正規表現文字をクオートする

AppleScriptから PHPを叩いて処理するなんてこともできます。

tell application "BBEdit"
	set targetWin to window 1
	set selectionText to selection of targetWin as Unicode text
	set selectionText to quoted form of selectionText
	set PHPScript to "php -r \"echo preg_quote(" & selectionText & ", '/');\""
	set selectionText to do shell script PHPScript
	set selection of targetWin to selectionText
end tell

これができれば、htmlspecialcharsでも rawurlencodeも簡単ですね。

特殊文字を HTMLエンティティに変換する

tell application "BBEdit"
	set targetWin to window 1
	set selectionText to selection of targetWin as Unicode text
	set selectionText to quoted form of selectionText
	set PHPScript to "php -r \"echo htmlspecialchars(" & selectionText & ");\""
	set selectionText to do shell script PHPScript
	set selection of targetWin to selectionText
end tell

RFC 3986に基づき URLエンコードを行う

tell application "BBEdit"
	set targetWin to window 1
	set selectionText to selection of targetWin as Unicode text
	set selectionText to quoted form of selectionText
	set PHPScript to "php -r \"echo rawurlencode(" & selectionText & ");\""
	set selectionText to do shell script PHPScript
	set selection of targetWin to selectionText
end tell

SFTP経由でファイルを開いて編集して保存する

普段は Transmit 別ウィンドウで開きますを利用しています。もちろん Transmit 経由でそのまま BBEditでファイルを編集、保存することができます。ところが、踏み台サーバーを経由して別のサーバーにアクセスするとか、面倒ですよね。サーバーで viでファイル編集とか、正直やりたくない。BBEditなら、それ、できます。

踏み台サーバー経由でアクセスしたサーバーのファイルを直接開いて編集する

~/.ssh/config に準備が必要です。以下は設定の例です。これで、ターミナルで「ssh bastion-1」でアクセスすることができます。パスフレーズなどが必要な場合は都度聞かれます。ところが、このまま Transmitに「bastion-1」としてもアクセスできません。

Host server-1
User user-name
HostName xx.xxx.xxx.xx
IdentityFile ~/.ssh/server-name.pem
Host bastion-1
User user-name
HostName xx.xxx.xxx.xx
IdentityFile ~/.ssh/bastion.key
ProxyCommand ssh server-1 -W %h:%p

BBEditなら、できます。

  1. File » Open from FTP/SFTP Server... ( Ctrl+Command+O )
  2. 「bastion-1」を入力
  3. パスフレーズを入力

BBEditのFTPブラウザ

ブックマークを保存することもできます。ファイルのアップロードもできますから、FTPクライアントがなくても GUIで操作できます。

これができるが故に、BBEditが手放せません。差分確認とか、複数ファイルの一括置換とか、なかなかに強力です。お試しあれ。

カテゴリー:技術情報 | サイト制作全般

投稿者:Junnama Noda

ブログ内検索

アーカイブ