pryにもbashやzshのように行頭スペースで書いたコマンドやコードを無視してくれる設定がないものかと思い調べてみました。
histignoreオプション
Pry.config.history.histignore
というオプションを.pryrc
に設定することで、入力内容をpry_history
に記録しないようにすることができるそうです。
Pry.config.history.histignore = [
/hist*/,
"ls",
"exit"
]
文字列や正規表現をArrayとして指定して、それらのどれか一つに入力行が合致すれば履歴への記録が行われません。下記のコードはpryが入力行を無視するかどうかを判定している部分のコードです。
def should_ignore?(line)
hist_ignore = Pry.config.history.histignore
return false if hist_ignore.nil? || hist_ignore.empty?
hist_ignore.any? { |p| line.to_s.match(p) }
end
インストール
2016/02/12にpryのmasterブランチにマージされた機能なので、rubygemsからインストールできる現時点の最新版(0.10.3)にはまだ含まれていません。そのためgithubからインストールする必要があります。
自分でcloneしてビルドしてインストールしてもいいのですが、1コマンドで全部やってくれるspecific_install
というgemを使いました。(gitプロトコルには対応してないのでhttpsを指定して下さい)
gem install specific_install
gem specific_install 'https://github.com/pry/pry'
Bundlerの環境だけにインストールしたい場合は、Gemfileにgithubのリポジトリを指定してbundle install
もしくはbundle update
して下さい。
gem 'pry', :git => 'git://github.com/pry/pry'
設定
行頭にスペースを入力した行は、履歴に記録されないようにしたいと考え、下記のような設定を試してみました。
Pry.config.history.histignore = [
/^\s.*$/
]
しかし、これだけでは行頭にスペースを入力しても履歴にしっかり記録されます。pryが自動インデントのために行頭スペースを削除した後、histignore
オプションの判定が行われているからのようです。
auto_indent
をオフにすることで上記問題は回避可能だったのですが、私の場合は自動インデントを捨ててまで、行頭スペースにこだわりがあるわけじゃなかったので、行頭にセミコロンを入力した時に履歴を記録しないように設定しました。その他にhistoryコマンドやlsコマンドも無視するようにしています。
Pry.config.history.histignore = [
/^\s*;.*$/,
/^(hist|history)(\s|$)/,
/^ls(\s|$)/,
"exit"
]
一つ注意点としては、行頭にセミコロンを入力した場合、その行はRubyのコードとして認識されるため、セミコロンに続いてpryコマンドを入力してもSyntax Error
になります。(詳しくはこちら) そのため上記設定では、特定行のpryコマンドだけ履歴に保存しないということは残念ながら出来ません。
参考資料
Feature/add histignore by bronzdoc · Pull Request #1484 · pry/pry
Command system (pry/pry Wiki)
rdp/specific_install