Humanity

Edit the world by your favorite way

autochmodx.vimっていうプラグイン作った

tyru/autochmodx.vim · GitHub

もし現在のファイルがスクリプトっぽかったら自動的に「chmod +x」してくれるプラグイン
Unix系の環境でしか必要ないだろうしWindowsとか*1では動かない。


このアイデア、確か元ネタはid:rubikitchさんのブログから*2だった気がするんですが、記事を検索してみても見当たらない...すみません...もし誰か心当たりあれば教えてください...

スクリプトかどうかの判定

スクリプトかどうかの判定については、現在次のような感じ。

  • 1行目が「#!」から始まる
  • ファイル名が「*.pl」である
  • ファイル名が「*.rb」である
  • ファイル名が「*.py」である
  • ファイル名が「*.sh」である

以上のいずれかにマッチするようだったらファイル書き込み時に「chmod +x」する。
ファイル名のパターン少ないですが、順次追加予定です。リクエストお待ちしています!

判定のカスタマイズ

判定はカスタマイズ可能で、詳しくは

:help g:autochmodx_scriptish_file_patterns

:help autochmodx#register_scriptish_detector()

を参照してください。
力尽きて英語helpしかないです。すみません。

「chmod +x」のタイミング

デフォルトでは

  • 書き込み時 (BufWritePost)
  • キー入力から一定時間立った後 (CursorHold)

のタイミングで「chmod +x」します。
もちろん個別に無効できます。
以下を参照してください。

:help g:autochmodx_no_BufWritePost_autocmd
:help g:autochmodx_no_CursorHold_autocmd

一時的な「chmod +x」の停止

もちろん一時的に書き込み時と一定時間立った場合の「chmod +x」を停止することもできます。
現在のバッファでのみ停止したい場合は

:AutoChmodDisable

どのバッファでも停止したい場合は

:AutoChmodDisable!

でできます。

注意点というほどでもないですが、:AutoChmodDisableで停止できる「chmod +x」は、
書き込み時(BufWritePost)とキー入力から一定時間立った後(CursorHold)の「chmod +x」で、
「:AutoChmodRun」すれば「chmod +x」されます。
「:AutoChmodRunAutocmd」は現在バッファの「chmod +x」が停止されていれば実行しません。*3

*1:has('unix')が0を返すような環境

*2:もちろんEmacs向けの設定

*3:実装的なこと言うとauto-commandから呼ばれるのはこのコマンド