peco 명령 기록에 날짜를 표시하고 날짜를 붙여 넣지 않음

개요



・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를 사용하여 단말기 조작을 폭속화
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



「언제의 커멘드인가」도 알고 싶고 또한 짜내고 싶기 때문에, 「-i」의 옵션을 추가
BUFFER=`history -n 1 | tac | awk '!a[$0]++' | peco`
↓
BUFFER=`history -i -n 1 | tac | awk '!a[$0]++' | peco`



겉보기에 보이는 것처럼 보이지만 이것을 그대로 선택하면 날짜도 명령으로 붙여 넣어집니다.


해결책



아래로 바꾸면 ↑와 같은 표시로 붙여 넣을 때 날짜만 제외할 수 있습니다.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



결과



날짜에서 명령을 검색하여 붙여넣을 수 있습니다.

좋은 웹페이지 즐겨찾기