kitten-diff(1) kitty kitten-diff(1)

kitten-diff - ابزار مقایسه بصری و نمایش تفاوت فایل‌ها و تصاویر در ترمینال Kitty

ابزاری سریع برای مقایسه دوبه‌دوی فایل‌ها با برجسته‌سازی نحو و پشتیبانی از تصاویر

  • نمایش تفاوت‌ها به‌صورت کنار هم (side-by-side) در ترمینال kitty
  • برجسته‌سازی غیرهمگام نحو (syntax highlighting) تفاوت‌های نمایش‌داده‌شده برای دستیابی به حداکثر سرعت
  • نمایش تفاوت تصاویر در کنار تفاوت‌های متنی، حتی از طریق نشست SSH
  • پشتیبانی از مقایسه بازگشتی دایرکتوری‌ها
تصویر صفحه، نمایش یک نمونه مقایسه (تصاویر در این فرمت پشتیبانی نمی‌شوند)

کافی است kitty را نصب کنید <#quickstart>.

در ترمینال kitty دستور زیر را اجرا کنید:

kitten diff file1 file2

تا تفاوت میان file1 و file2 را مشاهده کنید.

برای کوتاه‌تر شدن دستور می‌توانید یک نام مستعار (alias) در فایل راه‌انداز پوسته خود بسازید، برای نمونه:

alias d="kitten diff"

اکنون برای مقایسه دو فایل کافی است دستور زیر را اجرا کنید:

d file1 file2

همچنین می‌توانید به‌جای فایل‌ها، دایرکتوری‌ها را مشخص کنید تا تفاوت محتویات دایرکتوری‌ها به‌صورت بازگشتی نمایش داده شود.

عملیات میان‌بر
خروج 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

عبارت زیر را به فایل ~/.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

مجدداً، ساخت یک نام مستعار برای این دستور نیز مفید خواهد بود.

ابزار diff kitten از قابلیت‌های متعددی استفاده می‌کند که منحصراً در kitty وجود دارند <>، مانند پروتکل گرافیکی kitty <>، پروتکل صفحه‌کلید توسعه‌یافته <> و غیره. همچنین از زیرساخت برنامه‌های ترمینالی که برای سایر kittenهای ترمینال kitty ایجاد شده بهره می‌برد تا میزان کد مورد نیاز کاهش یابد (کل پیاده‌سازی زیر ۳۰۰۰ خط کد است).

و از نظر بنیادی، این ابزار تنها برای kitty است چون من آن را برای خودم نوشتم و بسیار نامحتمل است که از ترمینال دیگری استفاده کنم :)

می‌توانید رنگ‌های مورداستفاده، میان‌برهای صفحه‌کلید، پیاده‌سازی مقایسه، خطوط پیش‌فرض زمینه و موارد دیگر را با ایجاد یک فایل diff.conf در پوشه پیکربندی kitty خود <#confloc> سفارشی کنید. برای دیدن دستورالعمل‌های پیکربندی پشتیبانی‌شده به بخش‌های زیر مراجعه کنید.

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

هنگامی که به پایین‌تر از هدر یک فایل پیمایش می‌کنید، نام فایل و جداکننده را در بالای صفحه سنجاق‌شده نگه می‌دارد.

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

برجسته‌سازی

خروج
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

کد منبع این kitten در گیت‌هاب موجود است https://github.com/kovidgoyal/kitty/tree/master/kittens/diff.

kitten diff [options] file_or_directory_left file_or_directory_right

نمایش تفاوت دوبه‌دوی فایل‌ها/دایرکتوری‌های مشخص‌شده. همچنین می‌توانید از ساختار ssh:hostname:remote-file-path برای مقایسه فایل‌های راه دور استفاده کنید.

تعداد خطوط زمینه برای نمایش میان تغییرات. مقادیر منفی از تعداد تعیین‌شده در diff.conf استفاده می‌کنند. پیش‌فرض: -1
مسیر فایل(های) پیکربندی مورداستفاده را مشخص می‌کند. تمام فایل‌های پیکربندی با 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 استفاده کنید.

بازنویسی گزینه‌های پیکربندی منفرد؛ می‌تواند چندین بار مشخص شود. ساختار: name=value. برای نمونه: -o background=gray

می‌توانید یک فایل نمونه diff.conf با تمام تنظیمات پیش‌فرض و توضیحات مربوط به هر تنظیم را با کلیک روی sample diff.conf دانلود کنید.

Kovid Goyal

2026, Kovid Goyal

July 30, 2026 0.48.2