그렇습니다. 이것은 오래된 주제이지만이 질문들 중 어느 것도 저에게 대답하지 않았습니다. 그래서 나도 이것을 알아 내려고 노력했습니다.
'fc -R'과 'fc -W'를 사용하는 힌트에 대한 @Gilles의 감사에 대한 내 솔루션은 다음과 같습니다 .
아래 스크립트를 .zshrc 파일에 붙여 넣습니다.
소스 .zshrc로 다시로드
마지막 명령 인 D를 잊어 버리려면 'forget'을 입력하십시오. 마지막 3 개의 명령을 잊어 버리려면 'forget 3'을 입력하십시오. 섹시한 시즈.
위쪽 화살표를 누르면 마지막 명령으로 바로 이동하여 'forget'이라는 단어를 기억하지 않습니다 :).
업데이트 : 홈 경로가 추가되어 이제 모든 디렉토리에서 작동합니다.
업데이트 2 : 잊고 싶은 마지막 명령 수를 전달하는 기능이 추가되었습니다. : D. 마지막 2 개의 명령을 잊어 버리려면 'forget 2'를 시도하십시오 : D.
# Put a space at the start of a command to make sure it doesn't get added to the history.
setopt histignorespace
alias forget=' my_remove_last_history_entry' # Added a space in 'my_remove_last_history_entry' so that zsh forgets the 'forget' command :).
# ZSH's history is different from bash,
# so here's my fucntion to remove
# the last item from history.
my_remove_last_history_entry() {
# This sub-function checks if the argument passed is a number.
# Thanks to @yabt on stackoverflow for this :).
is_int() ( return $(test "$@" -eq "$@" > /dev/null 2>&1); )
# Set history file's location
history_file="${HOME}/.zsh_history"
history_temp_file="${history_file}.tmp"
line_cout=$(wc -l $history_file)
# Check if the user passed a number,
# so we can delete x lines from history.
lines_to_remove=1
if [ $# -eq 0 ]; then
# No arguments supplied, so set to one.
lines_to_remove=1
else
# An argument passed. Check if it's a number.
if $(is_int "${1}"); then
lines_to_remove="$1"
else
echo "Unknown argument passed. Exiting..."
return
fi
fi
# Make the number negative, since head -n needs to be negative.
lines_to_remove="-${lines_to_remove}"
fc -W # write current shell's history to the history file.
# Get the files contents minus the last entry(head -n -1 does that)
#cat $history_file | head -n -1 &> $history_temp_file
cat $history_file | head -n "${lines_to_remove}" &> $history_temp_file
mv "$history_temp_file" "$history_file"
fc -R # read history file.
}
여기 몇 가지 일이 있습니다. 이 명령을 사용하면 명령 앞에 공백을 입력 할 수 있으며 기록에 추가되지 않습니다.
setopt histignorespace
따라서 스페이스 바를 누르고 'echo hi'를 입력하고 Enter 키를 누른 다음 위쪽 화살표를 누르면 'echo hi'가 기록에 없습니다. :).
'forget'이라는 별칭이 my_remove_last_history_entry 앞에 공백이있는 방법에 주목하십시오. 이것은 zsh가 우리의 '잊어 버린'을 역사에 저장하지 않도록하기위한 것입니다.
기능 설명
ZSH는 히스토리 등을 위해 fc를 사용하므로 'fc -W'를 사용하여 현재 명령을 히스토리 파일에 기록하고 'head -n -1'을 사용하여 파일에서 마지막 명령을 자릅니다. 해당 출력을 임시 파일에 저장 한 다음 원래 기록 파일을 임시 파일로 바꿉니다. 마지막으로 fc -R을 사용하여 기록을 다시로드하십시오.
그러나 별명으로 수정 된 기능에 문제점이 있습니다.
함수 이름으로 함수를 실행하면 마지막 명령이 제거되고 함수를 호출합니다. 따라서 공백을 사용하여 별명을 호출하여 별명을 사용하므로 zsh는이 함수 이름을 히스토리 파일에 추가하지 않고 마지막 항목을 원하는 이름으로 만듭니다 .D.