LoginSignup
1
1

More than 5 years have passed since last update.

pryで特定の入力やコマンドを履歴に追加しない方法 (histignoreオプション)

Last updated at Posted at 2016-03-24

pryにもbashやzshのように行頭スペースで書いたコマンドやコードを無視してくれる設定がないものかと思い調べてみました。

histignoreオプション

Pry.config.history.histignoreというオプションを.pryrcに設定することで、入力内容をpry_historyに記録しないようにすることができるそうです。

.pryrc
Pry.config.history.histignore = [
   /hist*/,
   "ls",
   "exit"
]

文字列や正規表現をArrayとして指定して、それらのどれか一つに入力行が合致すれば履歴への記録が行われません。下記のコードはpryが入力行を無視するかどうかを判定している部分のコードです。

lib/pry/history.rb
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して下さい。

Gemfile
gem 'pry', :git => 'git://github.com/pry/pry'

設定

行頭にスペースを入力した行は、履歴に記録されないようにしたいと考え、下記のような設定を試してみました。

.pryrc
Pry.config.history.histignore = [
   /^\s.*$/
]

しかし、これだけでは行頭にスペースを入力しても履歴にしっかり記録されます。pryが自動インデントのために行頭スペースを削除した後、histignoreオプションの判定が行われているからのようです。

auto_indentをオフにすることで上記問題は回避可能だったのですが、私の場合は自動インデントを捨ててまで、行頭スペースにこだわりがあるわけじゃなかったので、行頭にセミコロンを入力した時に履歴を記録しないように設定しました。その他にhistoryコマンドやlsコマンドも無視するようにしています。

.pryrc
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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1