Windows の Sublime text の CTags プラグインで Auto Complete を使用する

CTagsの.tagファイルで自動補完リスト

このプラグインには、実は.tagファイルを関数の補完リストとして使用する機能が実装されている。
だがしかし!みんな大好きWindowsでは、この機能がなぜか動かない。

というわけで、CTagasのプラグインにCTagsAutoCompleteというClassがあるのでメンバ関数を確認…
f = os.popen(
"awk \"{ print " + prefix + "$1 }\" \"" + tags_path + "\"")

awk…

というわけで、理由はawkと呼ばれるテキスト処理ソフトウェアが必要ということが判明。
なのだが、Windowsには標準で入っていない。

ならばawkとやらをインストールだ。

Auto Completeを使えるようにする

なんとたったの3ステップ!

  1. Gawk for Windows から Binaries のzipをダウンロード
  2. zipを解凍
  3. PATHの通ったフォルダにawk.exeを設置

これで単語補完が働いたときに.tagsファイルに含まれる関数群がリストアップされてより仕事がはかどるという寸法です。

ただ、.tagsファイルが大きいと単語補完にも時間がかかる。
今はまだ、不要な関数群(composerで入れたライブラリとか)はtagファイルのビルド時に無視リストに入れておいた方がよさげ。

Sublime Text 3 のCtagsプラグインfork版公開中

プルリクに反応してくれなかった…

そんなわけで、いくつか変更した機能があるのでそれをfork版として公開しておきます。
github で公開中: naoyukik/CTags

変更内容

Fork: 0.5.0 リリース(2017-02-14)

  • .sublime-projectファイルからCTagsの設定を読み込めるように変更
  • このバージョンからmasterリポジトリをDefaultとし、タグを追加

developmentにて実装(2016-12-09)

  • Sublime Text 3 で実装された関数ジャンプ(Goto Definition)とクイックパネルでのファイルパスと同等の機能を実装
  • ctagsのオプションファイルをプロジェクトのルートフォルダから読み込めるように実装
  • Ctagファイルの自動更新に対応

上記ともに、セッティングファイルに使用フラグを追加してあるのでそれぞれ設定してからご使用ください。

たぶんST2でも使える…かな。

CTagsのプラグイン(本家): https://github.com/SublimeText/CTags

PHP で var_dumpのフォーマット

var_dumpデバッグしすぎ問題

複数のvar_dumpを出力させてどこに書き込んだか分からなくなった、なんてことないだろうか? (俺だけ?)

で、var_dump でデバッグしたいとき、こんな感じのフォーマットで設定しておく。

/**
 * 下記のフォーマットで書くと出力はこうなる
 * ExecFile: 呼び出したファイル名(行数)
 * Function: 呼び出した関数名
 * 値
 */
var_dump('ExecFile: '.basename(__FILE__).'('.__LINE__.')', 'FUNCTION: '.__FUNCTION__, variable, variable,...);
// var_dump は引数をカンマ区切りで無制限に渡せる。

Sublime Text 3 での Snippet設定

Sublime Text 3 のSnippetは下記設定例。
“var” を入力すると上記のスニペットが展開できるようになる。

ファイル名: var_dump.sublime-snippet

<snippet>
    <content><![CDATA[var_dump('ExecFile: '.basename(__FILE__).'('.__LINE__.')', 'FUNCTION: '.__FUNCTION__, ${1:variable});]]></content>
    <tabTrigger>var</tabTrigger>
    <scope>source.php</scope>
    <description>var_dump Debug</description>
</snippet>

Sublime text はプロジェクトを使う。

Twitter読んでると、プラグインがうまく動かないといった話がよくある。
そもそも Sublime Text はプロジェクトを設定することを前提として作られている。
もちろんプロジェクトがなくても動くけど、設定ファイルはプロジェクトフォルダ内から探す。みたいなプログラムがプラグインではよくされている。

ちょっとした開発でもプロジェクトをまず作りましょう。

Sublime Text 3 のPHP系プラグイン覚え書き

自分が使用しているSublime Text 3 の PHP向けのプラグインメモ。
随時追加していく予定。

Windows Application

Sublime Text とは関係ないけど、PHPerは使用できるようにしておいた方がいいと思われるアプリケーション。

Composer

PHP界隈では必須になりつつあるPEARに変わるライブラリ管理ツール。

  • インストール 公式サイト: Composer
  • 下記パスを環境変数に追加
    ※追加しないとcomposerでインストールしたものがパス無しで実行できない
%USERPROFILE%AppDataRoamingComposervendorbin

登録するコマンドは下記

composer config -g repositories.packagist composer http://packagist.jp

完了

Sublime Text 3 Plugins

SublimeLinter

SublimeLinter-phpcs

コマンドラインツールのPHP CodeSnifferを使用するとコーディング規約をチェックしてエラーを表示してくれる

  • コマンドラインツールのインストール
composer global require squizlabs/php_codesniffer=*

SublimeLinter-phpmd

コマンドラインツールのPHP Mess Detectorを使用するとプログラムで怪しいところをチェックしてエラーを表示してくれる

  • コマンドラインツールのインストール
composer global require phpmd/phpmd=*

ST3 日本語環境向けプラグイン SublimeCodic の紹介

SublimeCodic とは?

プログラミングで使用する日本語を技術者向けに英語へ翻訳してくれるサイトの翻訳APIをSublime Text 3で使用できるようにしたプラグインです。
github:SublimeCodic

この素晴らしいAPIを提供していただいているCodicのサービスは、公式サイトからも使用できます。
codic 公式サイト

このプラグインを作成はしたものの、すでにほぼ同一のCodicへのプラグインがPackage Controlへ公開されており、また公式でも公開しているので私が作成したプラグインの存在意義はかなり薄いです…。
私はもちろん使っていますが…。

それでも使ってみたいという奇特な方は、githubに登録方法などが記載してあります。
ぜひご活用ください。

今後の予定

現状は特に無さそう。
要望には対応できそうなら対応します。

ST3 日本語環境向けプラグイン ConvertFullHalfWidth の解説

ConvertFullHalfWidth とは?

Sublime Text 3 向けのカタカナ・アルファベット・数字を全角半角文字に変換するプラグインです。
github:SublimeConvertFullHalfWidth
※ 以前はConvertZenHanという名称で公開していましたが、同じような名前のプラグインがすでに公開されていたので変更しました。

なお、変換にはPyPIで公開されている jaconv を使用しています。

どうやってるの?

選択文字列とどの文字を変換対象にするかのフラグをプラグインのコマンドに渡し、フラグに従ってjacnonvに文字列を渡すだけ!

今後の追加予定

jaconvにはひらがな→カタカナ、カタカナ→ひらがなの変換もあるのでこの変換も出来るように実装予定。

/** 「もう仕事としてはガラケー特化のサイトなんて作らないよねー」っと思ってたらドンピシャでスマホサイトをガラケー向けに作り変えるお仕事来てプラグイン大勝利で震えたのはいい思い出。 */

以上。

ST3 日本語環境向けプラグイン MultibyteWordSeparators の解説

MultibyteWordSeparators とは?

Sublime Text 3 向けのマルチバイト文字列に対応した単語移動をサポートするパッケージです。
github:SublimeMultibyteWordSeparators
※ 5/1現在Package Controlに登録申請中のため、インストールは手動になります。
※ 5/4にPackage Controlに取り込まれました。

日本語に対応しているエディタの場合、単語移動でカーソル移動すると漢字・ひらがな・カタカナ・英数字を判別し、単語らしきところでカーソルが止まるようになっています。

Sublime Text 3 は、日本語を単語移動しようとすると2byte文字列が判別できず、一つの単語として移動してしまいます。

そこで単語移動出来るように MultibyteWordSeparators を作成しました。

どうやってるの?

漢字・ひらがな・カタカナ・英語・数字・記号のグループを作成し、片っ端から正規表現で引っかけています。

次に、カーソルの位置が漢字であればそれを主とし、主となる文字種から変わるまでカーソルを移動させ続けます。

例えば、ひらがなと同じリストに数字を入れればひらがなと同じ種別と判別され、移動もひらがなと数字は一緒に移動されます。

つまり、厳密には”単語”移動ではないです。

形態素解析は使わなかったの?

そういうわけで、形態素解析は使っていません。
実際のところ、開発時に形態素解析が手軽に使えることを知らなかった、という理由もあったり無かった……。

ちょっと形態素解析の場合について考えてみたけど、現在のカーソル位置から前後の文章をある程度チェックする手間、カーソル位置がその文書のどこに当たるのかをそれぞれチェックする必要がありそうで、逆に手間かも……。

個人的には現在のやり方がベターな気がしてます。

日本語の単語移動の件は困ってる方も結構いるようだったので、このプラグインが一助になればいいなと思いを込めての宣伝でした。

アップデート履歴

7/24 ver1.2.2 へアップデート

よく使う日本語記号(←↑→↓■□▲△▼▽◆◇○◎●★☆)をcjkSymbolへ追加

5/24 ver1.2.0 へアップデート

文字列の検索指定をsubliem-settingsへ移行。このため、ユーザーが任意の文字列で指定できるようになりました。

5/9 ver1.1.0 へアップデート

マウスでのダブルクリックでの単語選択に対応
マウスでダブルクリックを行った際、マウスカーソルの下にある文字を検出して単語を選択する機能を追加

以上。

Sublime Text のプラグインのコマンドに好きなキーを割り当てる

掲題通り、プラグインのコマンドにキーを割り当ててみる。
参考として今回は諸事情で割り当てを行ったSortTabsのGithubを見てみよう。

SortTabs/sort_tabs.py at master · bizoo/SortTabs · GitHub

Sublime textのPluginは

class SortTabsByNameCommand

のようにCommandが付くClass名に対してショートカットキーを設定することが出来る。
SortTabsByNameCommandは名前の通り、タブの名前でソートするコマンド。

ではこのコマンドにキーを割り当ててみる。

{ "keys": ["ctrl+alt+s"], "command": "sort_tabs_by_name" }

と、こうなる。

他のキーマップに倣って好きなkeysを設定する。
さらにcommandを見てもらうとClass名と違うことが分かる。

SortTabsByNameCommand
sort_tabs_by_name

よく見比べてもらえれば簡単で、Commandを削除し、最初の文字以外の大文字の前にアンダースコアを入れ、文字は全部小文字にするだけ。

これでキーを押してみるとタブがいつでも名前順にソートできる。

/** 今更感のあるエントリーだなぁ。 */