ترمینال ویندوز ۱۱ که واسط خط دستور جدیدتر PowerShell و همینطور cmd قدیمی را در خود جای داده، نسبت به گزینههایی که پیش از آن وجود داشتند، پیشرفت قابلتوجهی محسوب میشود و وقتی با قابلیتهای مخفی Windows Terminal آشنا شوید، امکانات آن حتی جذابتر هم به نظر میرسد.
بااینحال، مدتی است برای کارهای توسعهای بین چند پلتفرم مختلف جابهجا میشوم و به ترمینالی نیاز داشتم که در تمام این محیطها رفتار یکسانی داشته باشد. از طرفی، امکان پیکربندی کامل با استفاده از اسکریپتهای مبتنی بر Lua و ترجیحاً یک قابلیت داخلی برای مدیریت چند نشست ترمینال نیز برایم اهمیت داشت.
پس از بررسی چند گزینه مختلف، WezTerm دقیقاً همان ترمینالی بود که به دنبالش میگشتم و بعید میدانم به این زودیها دوباره سراغ Windows Terminal بروم. با اینتوتک همراه باشید تا این برنامهی جالب که جایگزینی حرفهای برای واسط خط دستور ویندوز است را معرفی کنیم.
یک واسط خط دستور با پشتیبانی از چند سیستم عاملی
تنظیمات یکسان در ویندوز، لینوکس و macOS
دلیل اصلی تغییر ترمینال برای من، پشتیبانی از چند پلتفرم بود و WezTerm در این زمینه انتخابی کاملاً منطقی به نظر میرسید. این ترمینال روی ویندوز 10 و نسخههای جدیدتر، لینوکس، macOS و FreeBSD و NetBSD اجرا میشود. من همان فایل پیکربندی را در پوشه Home تمام کامپیوترهایی که استفاده میکنم نگه میدارم و WezTerm نیز در همه آنها تقریباً به یک شکل رفتار میکند.
WezTerm با زبان Rust نوشته شده است. البته استفاده از Rust بهتنهایی به معنای سریعتر بودن یک ترمینال نیست؛ مزیت اصلی آن در اینجا ایمنی حافظه و ارائه یک فایل اجرایی مستقل است که برای اجرای آن به نصب اجزای اضافی نیاز ندارید. سرعت بالای WezTerm بیشتر از رندرکننده مجهز به شتابدهی GPU ناشی میشود؛ قابلیتی که پردازش نمایش متن را تا حد زیادی به کارت گرافیک میسپارد و فشار روی CPU را کاهش میدهد.
پشتیبانی از تصاویر نیز یکی دیگر از قابلیتهای قابلتوجه WezTerm است. این ترمینال از پروتکل تصویر iTerm2 و استانداردهای Kitty Graphics و Sixel پشتیبانی میکند. بنابراین دستوری مانند wezterm imgcat میتواند تصویر واقعی را مستقیماً در محیط ترمینال نمایش دهد، نه اینکه آن را با مجموعهای از کاراکترهای متنی و با کیفیت پایین شبیهسازی کند.
از سوی دیگر، پیکربندی WezTerm با Lua انجام میشود و همین بخش است که امکانات این ترمینال را بسیار انعطافپذیرتر میکند.
WezTerm قابلیتهای بیشتری از نیازهای من دارد
پیکربندی Lua، چندگانهسازی داخلی و میانبرهای SSH
Windows Terminal امکانات بسیار بیشتری از نیازهای من دارد؛ البته نکته مهمتر این است که تقریباً هر قابلیتی که لازم داشتم نیز در آن وجود دارد. تبها، پنلهای تقسیمشده، پروفایلهای مختلف برای Shellهای نصبشده روی سیستم، Quake Mode، رندرینگ GPU و یک رابط کاربری برای تغییر تنظیمات، همگی در Windows Terminal ارائه میشوند؛ بنابراین برای بسیاری از کاربران حتی نیازی به دستکاری فایل پیکربندی وجود ندارد.
تفاوت مهم WezTerm در نحوه پیکربندی آن است. Windows Terminal تنظیمات خود را در قالب JSON ذخیره میکند؛ JSON یک قالب داده است و زبان برنامهنویسی محسوب نمیشود. بنابراین میتواند مقادیر مختلف را در خود نگه دارد، اما امکان اجرای منطق و شرطها را ندارد.
در مقابل، WezTerm فایل .wezterm.lua را از پوشه Home شما میخواند و Lua یک زبان اسکریپتنویسی کامل است. بهعنوان مثال، میتوانم در همان یک فایل شرطی تعریف کنم که روی لپتاپ فونت کوچکتر و روی کامپیوتر دسکتاپ فونت بزرگتری استفاده شود. پس از ذخیره فایل نیز تغییرات تقریباً بلافاصله اعمال میشوند، زیرا WezTerm میتواند هنگام اجرا فایل پیکربندی خود را دوباره بارگذاری کند.
قابلیت Multiplexing یا چندگانهسازی نیز یکی دیگر از امکاناتی بود که به آن نیاز داشتم. سالها از tmux استفاده کردم، اما هیچوقت کاملاً به آن عادت نکردم؛ یکی از دلایل اصلی این بود که باید با یک زبان پیکربندی و مجموعهای از میانبرهای صفحهکلید دیگر نیز سروکله میزدم.
WezTerm پنلها، تبها و Workspaceها را مستقیماً در خود ترمینال قرار میدهد و هر پنل نیز تاریخچه خروجی مخصوص به خود را دارد. بنابراین وقتی خروجی یک پنل را جستوجو میکنید، محتوای سایر پنلها تحت تأثیر قرار نمیگیرد.
قابلیت دیگری که بهمرور بیشتر از آن استفاده میکنم، SSH Domains است. میتوانید با تنها یک خط کد Lua، WezTerm را به فایل پیکربندی SSH موجود روی سیستم متصل کنید و تمام میزبانهای تعریفشده در آن را بهعنوان Domain در اختیار داشته باشید.
برای مثال، کافی است با فشردن Ctrl + Shift + P ، پنل Command Palette را باز کنید، نام سرور را وارد کنید و کلید Enter را فشار دهید. سپس یک Shell از راه دور در تب جدید باز میشود. Windows Terminal نیز میتواند تقریباً همین کار را با پروفایلی انجام دهد که یک دستور SSH را بهصورت خودکار اجرا میکند، اما باید چنین پروفایلی را برای هر سرور بهصورت جداگانه ایجاد کنید.
قابلیت شخصیسازی بسیار گستردهای دارد
یک فایل Lua ظاهر و رفتار ترمینال را کنترل میکند
تقریباً تمام تغییراتی که در WezTerm ایجاد کردهام در همان فایل .wezterm.lua قرار دارند. این ترمینال پنجره اختصاصی برای تنظیمات ندارد و شاید در نگاه اول این موضوع یک نقطهضعف به نظر برسد، اما در عمل میتوانید کل پیکربندی را در یک فایل متنی نگه دارید، آن را در سیستم کنترل نسخه قرار دهید و در مدت کوتاهی به کامپیوتر جدید منتقل کنید.
از نظر ظاهری، شفافیت پنجره را روی 0.90 تنظیم کردهام تا مقدار کمی حالت شفاف داشته باشد، یکی از طرحهای رنگی داخلی را انتخاب کردهام و برای نوار تبها نیز فونتی متفاوت از متن اصلی ترمینال در نظر گرفتهام.
ظاهر نشانگر و سرعت چشمکزدن آن نیز بهصورت دقیق قابل تنظیم است و حتی میتوانید رنگ تبها را با تم کلی دسکتاپ خود هماهنگ کنید. WezTerm صدها طرح رنگی آماده دارد و از فایلهای طرح رنگ سازگار با iTerm2 نیز پشتیبانی میکند؛ بنابراین بسیاری از تمهایی که در اینترنت پیدا میکنید، بدون دردسر خاصی قابل استفاده هستند.
میانبرهای صفحهکلید و موس نیز کاملاً قابل تغییر هستند. برای مثال، من مدیریت تبها را مشابه مرورگر تنظیم کردهام؛ بنابراین Alt + T یک تب جدید باز میکند و Alt + W تب فعلی را میبندد. همچنین Alt + V و Alt + H را برای تقسیم عمودی و افقی پنلها اختصاص دادهام و با کلیدهای Alt + جهتها میتوانم بین پنلها جابهجا شوم.
یک مشکل کوچک در اتصال SSH
البته WezTerm یک نکته عجیب دارد که ممکن است هنگام کار با سرورهای راه دور خیلی زود آزاردهنده شود. این ترمینال خود را بهعنوان یک نوع ترمینال معرفی میکند که ممکن است در پایگاه داده terminfo برخی سیستمهای راه دور وجود نداشته باشد.
این مسئله میتواند باعث اختلال در برنامههایی مانند nano شود یا حتی موجب شود پس از اتصال SSH، میانبر Ctrl + L نتواند صفحه را بهدرستی پاک کند.
برای من، تعیین مقدار term روی xterm-256color در فایل پیکربندی مشکل را برطرف کرد. بنابراین اگر هنگام اتصال SSH با چنین مشکلاتی مواجه شدید، تنظیم نوع ترمینال یکی از اولین مواردی است که ارزش بررسی دارد.
WezTerm اکنون ترمینال پیشفرض من در تمام دستگاهها است
WezTerm سریعترین ترمینال موجود نیست. گزینههایی مانند Alacritty و foot سبکتر هستند و در برخی سناریوها عملکرد بهتری دارند. از طرف دیگر، WezTerm در ابتدای کار تنظیمات بیشتری از کاربر میخواهد.
اگر ترجیح میدهید برای تنظیمات یک پنجره گرافیکی با گزینههای مختلف و چکباکس داشته باشید، Windows Terminal همچنان انتخاب مناسبتری است. این گزینه بهخصوص برای کاربرانی توصیه میشود که بیشتر وقت خود را با دستورات روزمره PowerShell میگذرانند و تمایلی به مدیریت فایلهای پیکربندی ندارند.
اما چیزی که باعث شده من همچنان WezTerm را انتخاب کنم، ترکیب پشتیبانی چندسکویی، پیکربندی مبتنی بر Lua و قابلیت Multiplexing داخلی است. برای استفاده از این امکانات لازم نیست ابزار دیگری مانند tmux را جداگانه نصب و پیکربندی کنم.
Windows Terminal همچنان روی کامپیوتر من نصب است و در کنار مجموعهای از ابزارهای قدیمی قرار دارد که هیچوقت بهطور کامل حذفشان نکردهام. بااینحال، چند ماه است که هیچ دلیلی برای باز کردن آنها نداشتهام.
چرا WezTerm میتواند گزینه جذابی برای کاربران حرفهای باشد؟
اگر کار شما فقط اجرای چند دستور PowerShell یا CMD باشد، احتمالاً Windows Terminal تمام نیازهایتان را برآورده میکند. اما برای توسعهدهندگانی که بین ویندوز، لینوکس و macOS جابهجا میشوند، داشتن یک محیط ترمینال مشترک میتواند مزیت مهمی باشد.
پیکربندی قابلاسکریپت WezTerm این امکان را میدهد که تنظیمات، میانبرها، ظاهر و حتی رفتار ترمینال را در قالب یک فایل واحد مدیریت کنید. از طرفی، پشتیبانی داخلی از Workspace و Multiplexing باعث میشود برای بسیاری از کارهای روزمره توسعه، وابستگی به ابزارهای جانبی کاهش پیدا کند.
به همین دلیل، WezTerm بیشتر از اینکه صرفاً یک جایگزین برای Windows Terminal باشد، میتواند یک محیط کاری کامل برای کاربران حرفهای ترمینال محسوب شود.
اینتوتک




