0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pecoのコマンド履歴に日付を表示し、かつ日付を貼り付けない

Last updated at Posted at 2020-10-23

概要

・mac/zsh
・history(コマンドの実行履歴)に日付も含めて保存
・pecoを使って、ctrl+rからコマンド履歴を引用する
・日付からも検索したい
・履歴の選択時に日付が貼られると困る

historyに日付が記録できていない人

下記を.zshrcに追加し source ~/.zshrc してください。

precmd='history -a; history -c; history -r' # 履歴のリアルタイム反映
setopt Extended_History           # 日付を保存する
setopt append_history             # 履歴を既存のhistoryに追加していく
setopt EXTENDED_HISTORY           # 開始と終了を記録

## 日付から検索したい まず、下記のように設定するとhistory自体に日付は入っていても、pecoの検索画面に日付が表示されません。 (日付で検索できない) 参考: [pecoを使って端末操作を爆速にする](https://qiita.com/reireias/items/fd96d67ccf1fdffb24ed)
function peco-history-selection() {
    BUFFER=`history -n 1 | tac | awk '!a[$0]++' | peco`
    CURSOR=$#BUFFER
    zle reset-prompt
}

zle -N peco-history-selection
bindkey '^R' peco-history-selection

image.png


「いつのコマンドなのか」も知りたい且つ絞りたいため、「-i」のオプションを追加
BUFFER=`history -n 1 | tac | awk '!a[$0]++' | peco`
↓
BUFFER=`history -i -n 1 | tac | awk '!a[$0]++' | peco`

image.png


一見できたように見えますが、これをそのまま選択すると日付もコマンドとして貼り付けられてしまいます。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/818772/95862c0d-2eb1-7fb6-8c4c-ad8987b66e86.png)

解決策

下記に置き換えると↑と同様の表示で、貼り付け時に日付だけ除外できます。
BUFFER= 部分で出力された内容から、historyの番号や日付の区切りのスペースを数えて、以降の文字列に加工しています。
awk '!a[$0]++' は表示から重複を削除するものなので、不要なら削除可

function peco-history-selection() {
    local selected_log=`history -i -n 1 | tac | awk '!a[$0]++' | peco`
    if [ -n "$selected_log" ]; then
    BUFFER=`echo $selected_log | cut -d ' ' -f 4-`
    CURSOR=$#BUFFER
    zle reset-prompt
fi
}

zle -N peco-history-selection
bindkey '^R' peco-history-selection

image.png

結果

日付からコマンドを検索して貼り付けられるようになりました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?