হ্যাঁ, এটি একটি পুরানো বিষয়, তবে এই প্রশ্নের কোনও উত্তরই আমার পক্ষে দেওয়া হয়নি তাই আমি এগুলিও বের করার চেষ্টা করে যুগে যুগে সময় কাটিয়েছি!
' গিগলস ' থেকে 'fc -R' এবং 'fc -W ' ব্যবহারের ইঙ্গিতটির জন্য ধন্যবাদ সহ আমার সমাধান এখানে ।
এর নিচে স্ক্রিপ্টটি আপনার .zshrc ফাইলে আটকান।
উত্স .zshrc দিয়ে পুনরায় লোড করুন
তারপরে শেষ কমান্ডটি ভুলে যেতে 'ভুলে যান' টাইপ করুন: ডি। শেষ 3 টি কমান্ড ভুলে গিয়ে 'ভুলে যান 3' টাইপ করুন। কিছু সেক্সি শিজ্জায়।
উপরের তীর টিপুন আপনাকে সরাসরি শেষ কমান্ডে নিয়ে যাবে এবং 'ভুলে যান' শব্দটি মনে রাখবে না :) :)
আপডেট হয়েছে: হোম পাথ যুক্ত হয়েছে , সুতরাং এটি এখন সমস্ত ডিরেক্টরিতে কাজ করে ol
আপডেট 2: আপনি ভুলে যেতে চান এমন সর্বশেষ আদেশের সংখ্যাটি পাস করার ক্ষমতা যুক্ত করেছে: ডি। সর্বশেষ 2 কমান্ডগুলি ভুলে যেতে 2 টি ভুলে গিয়ে চেষ্টা করুন: ডি।
# 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
সুতরাং আমরা স্পেস বার টিপতে পারি এবং টাইপ করতে পারি 'ইকো হাই', এন্টার টিপুন এবং যখন আমরা উপরের তীর টিপুন তখন 'ইকো হাই' আমাদের ইতিহাসে নেই)।
আমার_রেমোভ_স্তর_ইস্ত্রি_তন্ত্রের আগে কীভাবে উপন্যাস 'ভুলে যান' তার একটি স্থান রয়েছে তা লক্ষ্য করুন। এটি এমনটি যাতে zsh ইতিহাসে আমাদের 'ভুলে যাওয়া' সংরক্ষণ করে না।
ফাংশন ব্যাখ্যা
জেডএসএইচ ইতিহাস বা অন্য কিছুর জন্য এফসি ব্যবহার করে, তাই আমরা আমাদের বর্তমান কমান্ডগুলি ইতিহাসের ফাইলে লেখার জন্য 'এফসি-ডাব্লু' করি, সেগুলি আমরা ফাইলের শেষ কমান্ডটি ছাঁটাইতে 'হেড-এন -1' ব্যবহার করি। আমরা সেই আউটপুটটিকে একটি অস্থায়ী ফাইলে সংরক্ষণ করি এবং তারপরে অস্থায়ী ফাইলের সাথে মূল ইতিহাস ফাইলটি প্রতিস্থাপন করি। এবং পরিশেষে fc -R দিয়ে ইতিহাস পুনরায় লোড করুন।
ফাংশনটিতে সমস্যা আছে যা ওরফে দিয়ে স্থির করা হয়েছে।
যদি আমরা এর নামে এই ফাংশনটি চালাই তবে এটি সর্বশেষ আদেশটি সরিয়ে ফেলবে, যা ফাংশনে কল the এই কারণেই আমরা একটি স্থান ব্যবহার করে এটির সাথে ডাকের সাথে উপনামটি ব্যবহার করি, যাতে zsh ইতিহাস ফাইলে এই ফাংশনটির নামটি যুক্ত না করে, আমরা যা চাই তার শেষ প্রবেশটি তৈরি করে: ডি।