| kitten-diff(1) | kitty | kitten-diff(1) |
نام (NAME)
kitten-diff - ابزار مقایسه بصری و نمایش تفاوت فایلها و تصاویر در ترمینال Kitty
ابزاری سریع برای مقایسه دوبهدوی فایلها با برجستهسازی نحو و پشتیبانی از تصاویر
ویژگیهای اصلی (MAJOR FEATURES)
- نمایش تفاوتها بهصورت کنار هم (side-by-side) در ترمینال kitty
- برجستهسازی غیرهمگام نحو (syntax highlighting) تفاوتهای نمایشدادهشده برای دستیابی به حداکثر سرعت
- نمایش تفاوت تصاویر در کنار تفاوتهای متنی، حتی از طریق نشست SSH
- پشتیبانی از مقایسه بازگشتی دایرکتوریها
نصب (INSTALLATION)
کافی است kitty را نصب کنید <#quickstart>.
نحوه استفاده (USAGE)
در ترمینال kitty دستور زیر را اجرا کنید:
kitten diff file1 file2
تا تفاوت میان file1 و file2 را مشاهده کنید.
برای کوتاهتر شدن دستور میتوانید یک نام مستعار (alias) در فایل راهانداز پوسته خود بسازید، برای نمونه:
alias d="kitten diff"
اکنون برای مقایسه دو فایل کافی است دستور زیر را اجرا کنید:
d file1 file2
همچنین میتوانید بهجای فایلها، دایرکتوریها را مشخص کنید تا تفاوت محتویات دایرکتوریها بهصورت بازگشتی نمایش داده شود.
کنترلهای صفحهکلید (KEYBOARD CONTROLS)
| عملیات | میانبر |
| خروج | Q |
| پیمایش یک خط به بالا | K, Up |
| پیمایش یک خط به پایین | J, Down |
| پیمایش یک صفحه به بالا | PgUp |
| پیمایش یک صفحه به پایین | PgDn |
| پیمایش به ابتدا | Home |
| پیمایش به انتها | End |
| پیمایش به صفحه بعد | Space, PgDn, Ctrl+F |
| پیمایش به صفحه قبل | PgUp, Ctrl+B |
| پیمایش نیم صفحه به پایین | Ctrl+D |
| پیمایش نیم صفحه به بالا | Ctrl+U |
| پیمایش به تغییر بعدی | N |
| پیمایش به تغییر قبلی | P |
| افزایش خطوط زمینه | + |
| کاهش خطوط زمینه | - |
| نمایش تمام خطوط زمینه | A |
| بازگردانی زمینه پیشفرض | = |
| جستوجو به جلو | / |
| جستوجو به عقب | ? |
| پاکسازی جستوجو یا خروج | Esc |
| پیمایش به تطابق بعدی | >, . |
| پیمایش به تطابق قبلی | <, , |
| کپی انتخاب به کلیپبورد | y |
| کپی انتخاب یا خروج | Ctrl+C |
یکپارچهسازی با گیت (INTEGRATING WITH GIT)
عبارت زیر را به فایل ~/.gitconfig اضافه کنید:
[diff]
tool = kitty
guitool = kitty.gui
[difftool]
prompt = false
trustExitCode = true
[difftool "kitty"]
cmd = kitten diff $LOCAL $REMOTE
[difftool "kitty.gui"]
cmd = kitten diff $LOCAL $REMOTE
اکنون برای استفاده از kitty-diff جهت مشاهده تفاوتهای گیت، کافی است دستور زیر را اجرا کنید:
git difftool --no-symlinks --dir-diff
مجدداً، ساخت یک نام مستعار برای این دستور نیز مفید خواهد بود.
چرا این ابزار فقط در کیتی کار میکند؟ (WHY DOES THIS WORK ONLY IN KITTY?)
ابزار diff kitten از قابلیتهای متعددی استفاده میکند که منحصراً در kitty وجود دارند <>، مانند پروتکل گرافیکی kitty <>، پروتکل صفحهکلید توسعهیافته <> و غیره. همچنین از زیرساخت برنامههای ترمینالی که برای سایر kittenهای ترمینال kitty ایجاد شده بهره میبرد تا میزان کد مورد نیاز کاهش یابد (کل پیادهسازی زیر ۳۰۰۰ خط کد است).
و از نظر بنیادی، این ابزار تنها برای kitty است چون من آن را برای خودم نوشتم و بسیار نامحتمل است که از ترمینال دیگری استفاده کنم :)
پیکربندی (CONFIGURATION)
میتوانید رنگهای مورداستفاده، میانبرهای صفحهکلید، پیادهسازی مقایسه، خطوط پیشفرض زمینه و موارد دیگر را با ایجاد یک فایل diff.conf در پوشه پیکربندی kitty خود <#confloc> سفارشی کنید. برای دیدن دستورالعملهای پیکربندی پشتیبانیشده به بخشهای زیر مراجعه کنید.
مقایسه (DIFFING)
syntax_aliases pyj:py pyi:py recipe:py
نامهای مستعار پسوند فایل برای برجستهسازی نحو. برای نمونه، جهت برجستهسازی نحو file.xyz مانند file.abc از تنظیم xyz:abc استفاده کنید. نامهای مستعار متعدد باید با فاصله از یکدیگر جدا شوند.
num_context_lines 3
تعداد خطوط زمینه که در اطراف هر تغییر نمایش داده میشوند.
diff_cmd auto
دستور مقایسهای که باید استفاده شود. باید شامل جاینگهدار _CONTEXT_ باشد که با تعداد خطوط زمینه جایگزین خواهد شد. چند مقدار ویژه مجاز هستند: auto بهطور خودکار یک پیادهسازی مقایسه در دسترس را انتخاب میکند. builtin از الگوریتم مقایسه مهارشده (anchored diff) از کتابخانه استاندارد Go استفاده میکند. git از دستور git برای انجام مقایسه استفاده خواهد کرد. diff از دستور diff برای انجام مقایسه بهره میبرد.
replace_tab_by \x20\x20\x20\x20
رشتهای که باید جایگزین تبها شود. پیشفرض استفاده از چهار فاصله است.
یک الگوی glob که تنها با نام فایلها و دایرکتوریها مطابقت داده میشود. فایلها و دایرکتوریهای منطبق هنگام پیمایش فایلسیستم برای یافتن فایلهای مقایسه نادیده گرفته میشوند. میتواند چندین بار برای استفاده از الگوهای متعدد مشخص شود. برای نمونه:
ignore_name .git ignore_name *~ ignore_name *.pyc
mark_moved_lines yes
خطوطی که جابهجا شدهاند (یعنی از سمت چپ حذف شده و در سمت راست با تفاوت اضافه شدهاند) را با رنگ moved_bg برجسته میکند.
word_diff_mode words
الگوریتم مورداستفاده برای برجستهسازی بخشهایی از خطوط تغییریافته که با هم تفاوت دارند. هنگامی که روی words تنظیم شود، کلمات تغییریافته در هر خط مشخص میشوند. هنگامی که روی central تنظیم شود، ناحیه مرکزی تغییریافته در هر خط در سطح بایت برجسته میشود. حالت words معمولاً کاربردیتر است چرا که دقیقاً نشان میدهد کدام کلمات تغییر کردهاند. توجه داشته باشید که حالت words تنها زمانی اعمال میشود که یک بخش تغییریافته (chunk) دارای تعداد برابری از خطوط اضافهشده و حذفشده باشد.
word_regex [^\s\p{P}]+
عبارت باقاعده (regex) مورداستفاده برای تعریف یک کلمه هنگامی که word_diff_mode روی words تنظیم شده است. مقدار پیشفرض با هر توالی از نویسههای غیرفاصلهای و غیرنشانهگذاری مطابقت دارد. این عبارت باید یک عبارت باقاعده معتبر Go باشد. در صورت ارائه عبارت نامعتبر، diff با خطا متوقف خواهد شد.
sticky_header yes
هنگامی که به پایینتر از هدر یک فایل پیمایش میکنید، نام فایل و جداکننده را در بالای صفحه سنجاقشده نگه میدارد.
رنگها (COLORS)
color_scheme auto
انتخاب استفاده از رنگهای روشن یا تیره. مقدار پیشفرض auto به معنای پیروی از طرح رنگ ترمینال والد است. توجه داشته باشید که رنگهای واقعی مورداستفاده برای طرحهای تیره با تنظیمات dark_* در زیر تعیین میشوند و تنظیمات بدون پیشوند برای رنگهای روشن استفاده میشوند.
pygments_style default
طرح رنگ pygments مورداستفاده برای برجستهسازی نحو. برای فهرستی از طرحها به سبکهای داخلی pygments https://pygments.org/styles مراجعه کنید. توجه داشته باشید که این گزینه رنگهای مورداستفاده برای مقایسه را تغییر نمیدهد، بلکه فقط رنگهای برجستهسازی نحو را تغییر میدهد. برای تغییر رنگهای عمومی از تنظیمات زیر استفاده کنید. این گزینه رنگهای مورداستفاده برای طرحهای رنگی روشن را تعیین میکند؛ از dark_pygments_style برای تغییر رنگهای طرحهای تیره استفاده کنید.
dark_pygments_style github-dark
طرح رنگ pygments مورداستفاده برای برجستهسازی نحو با رنگهای تیره. برای فهرستی از طرحها به سبکهای داخلی pygments https://pygments.org/styles مراجعه کنید. توجه داشته باشید که این گزینه رنگهای مورداستفاده برای مقایسه را تغییر نمیدهد، بلکه فقط رنگهای برجستهسازی نحو را تغییر میدهد. برای تغییر رنگهای عمومی از تنظیمات زیر استفاده کنید. این گزینه رنگهای مورداستفاده برای طرحهای رنگی تیره را تعیین میکند؛ از pygments_style برای تغییر رنگهای طرحهای روشن استفاده کنید.
foreground black dark_foreground #f8f8f2 background white dark_background #212830
رنگهای پایه
title_fg black dark_title_fg white title_bg white dark_title_bg #212830
رنگهای عنوان
margin_bg #fafbfc dark_margin_bg #212830 margin_fg #aaaaaa dark_margin_fg #aaaaaa
رنگهای حاشیه
removed_bg #ffeef0 dark_removed_bg #352c33 highlight_removed_bg #fdb8c0 dark_highlight_removed_bg #5c3539 removed_margin_bg #ffdce0 dark_removed_margin_bg #5c3539
پسزمینه متنهای حذفشده
added_bg #e6ffed dark_added_bg #263834 highlight_added_bg #acf2bd dark_highlight_added_bg #31503d added_margin_bg #cdffd8 dark_added_margin_bg #31503d
پسزمینه متنهای اضافهشده
moved_bg #fffde7 dark_moved_bg #003333 moved_margin_bg #fff3b0 dark_moved_margin_bg #00495b
پسزمینه متنهای جابهجاشده (همان متنی که در یک مکان حذف شده و در مکانی دیگر اضافه شده است)
filler_bg #fafbfc dark_filler_bg #262c36
پسزمینه خط پرکننده (خالی)
margin_filler_bg none dark_margin_filler_bg none
پسزمینه خط پرکننده (خالی) در حاشیهها؛ پیشفرض همان پسزمینه پرکننده است
hunk_margin_bg #dbedff dark_hunk_margin_bg #0c2d6b hunk_bg #f1f8ff dark_hunk_bg #253142
رنگهای هدر قطعه تغییر (hunk)
search_bg #444 dark_search_bg #2c599c search_fg white dark_search_fg white select_bg #b4d5fe dark_select_bg #2c599c select_fg black dark_select_fg white
برجستهسازی
کلیدهای میانبر (KEYBOARD SHORTCUTS)
- خروج
map --allow-fallback=shifted,ascii q quit map esc quit
- پیمایش به پایین
map --allow-fallback=shifted,ascii j scroll_by 1 map down scroll_by 1
- پیمایش به بالا
map --allow-fallback=shifted,ascii k scroll_by -1 map up scroll_by -1
- پیمایش به ابتدا
map home scroll_to start
- پیمایش به انتها
map end scroll_to end
- پیمایش به صفحه بعد
map page_down scroll_to next-page map space scroll_to next-page map --allow-fallback=shifted,ascii ctrl+f scroll_to next-page
- پیمایش به صفحه قبل
map page_up scroll_to prev-page map --allow-fallback=shifted,ascii ctrl+b scroll_to prev-page
- پیمایش نیم صفحه به پایین
map --allow-fallback=shifted,ascii ctrl+d scroll_to next-half-page
- پیمایش نیم صفحه به بالا
map --allow-fallback=shifted,ascii ctrl+u scroll_to prev-half-page
- پیمایش به تغییر بعدی
map --allow-fallback=shifted,ascii n scroll_to next-change
- پیمایش به تغییر قبلی
map --allow-fallback=shifted,ascii p scroll_to prev-change
- پیمایش به فایل بعدی
map --allow-fallback=shifted,ascii shift+j scroll_to next-file
- پیمایش به فایل قبلی
map --allow-fallback=shifted,ascii shift+k scroll_to prev-file
- نمایش تمام زمینه
map --allow-fallback=shifted,ascii a change_context all
- نمایش زمینه پیشفرض
map = change_context default
- افزایش زمینه
map + change_context 5
- کاهش زمینه
map - change_context -5
- جستوجو به جلو
map / start_search regex forward
- جستوجو به عقب
map ? start_search regex backward
- پیمایش به تطابق جستوجوی بعدی
map . scroll_to next-match map > scroll_to next-match
- پیمایش به تطابق جستوجوی قبلی
map , scroll_to prev-match map < scroll_to prev-match
- جستوجو به جلو (بدون regex)
map --allow-fallback=shifted,ascii f start_search substring forward
- جستوجو به عقب (بدون regex)
map --allow-fallback=shifted,ascii b start_search substring backward
- کپی انتخاب به کلیپبورد
map --allow-fallback=shifted,ascii y copy_to_clipboard
- کپی انتخاب به کلیپبورد یا خروج در صورت نبود انتخاب
map --allow-fallback=shifted,ascii ctrl+c copy_to_clipboard_or_exit
کد منبع ابزار مقایسه (SOURCE CODE FOR DIFF)
کد منبع این kitten در گیتهاب موجود است https://github.com/kovidgoyal/kitty/tree/master/kittens/diff.
رابط خط فرمان (COMMAND LINE INTERFACE)
kitten diff [options] file_or_directory_left file_or_directory_right
نمایش تفاوت دوبهدوی فایلها/دایرکتوریهای مشخصشده. همچنین میتوانید از ساختار ssh:hostname:remote-file-path برای مقایسه فایلهای راه دور استفاده کنید.
گزینهها (OPTIONS)
- --context <CONTEXT>
- تعداد خطوط زمینه برای نمایش میان تغییرات. مقادیر منفی از تعداد تعیینشده در diff.conf استفاده میکنند. پیشفرض: -1
- --config <CONFIG>
- مسیر
فایل(های)
پیکربندی
مورداستفاده
را مشخص
میکند.
تمام
فایلهای
پیکربندی
با diff.conf داخلی
ادغام
میشوند و
مقادیر
داخلی را
بازنویسی
میکنند.
این گزینه
میتواند
چندین بار
برای
خواندن
پیاپی
چندین فایل
پیکربندی
مشخص شود که
همگی با هم
ادغام
خواهند شد.
برای
بارگذاری
نکردن هیچ
فایل
پیکربندی
از مقدار
ویژه NONE
استفاده
کنید.
اگر این گزینه مشخص نشود، فایلهای پیکربندی به این ترتیب جستوجو میشوند: $XDG_CONFIG_HOME/kitty/diff.conf، ~/.config/kitty/diff.conf، $XDG_CONFIG_DIRS/kitty/diff.conf. نخستین فایلی که وجود داشته باشد به عنوان فایل پیکربندی استفاده میشود.
اگر متغیر محیطی KITTY_CONFIG_DIRECTORY <#envvar-KITTY_CONFIG_DIRECTORY> تعیین شده باشد، همواره از آن دایرکتوری استفاده میشود و جستوجوی فوق انجام نخواهد گرفت.
اگر /etc/xdg/kitty/diff.conf وجود داشته باشد، پیش از هر فایل پیکربندی کاربری ادغام میشود (یعنی با اولویت کمتر). این فایل میتواند برای تعیین مقادیر پیشفرض سرتاسری سیستم برای همه کاربران استفاده شود. همچنین میتوانید از - یا /dev/stdin برای خواندن پیکربندی از STDIN استفاده کنید.
- --override <OVERRIDE>, -o <OVERRIDE>
- بازنویسی گزینههای پیکربندی منفرد؛ میتواند چندین بار مشخص شود. ساختار: name=value. برای نمونه: -o background=gray
نمونه diff.conf (SAMPLE DIFF.CONF)
میتوانید یک فایل نمونه diff.conf با تمام تنظیمات پیشفرض و توضیحات مربوط به هر تنظیم را با کلیک روی sample diff.conf دانلود کنید.
نویسنده (AUTHOR)
Kovid Goyal
حق نشر (COPYRIGHT)
2026, Kovid Goyal
| July 30, 2026 | 0.48.2 |