آموزش Emacs

سلام دوستان امیدوارم حال همتون خوب باشه… قبلا که آموزش ویم رو دوست عزیزم هادی گل زحمتش رو کشیدند و تو انجمن قرار دادند و دیدم که استقبال خوبی شد و به درد خیلیا خورد, و از اونجایی که شنیدم آقا سمیر می خوان در اینده ای نه چندان دور چند ویدیو واسه fg42 خودشون بزارن منم فرصت دونستم که چه بهتر اول با ایمکس یکم اشنایی داشته باشیم و تا بعد خواستیم به fg42 یا هر انشعاب دیگه ای سوییچ کنیم.

در اخر هم اینو اضافه کنم که این آموزش ها کاملا مبتدی بوده و بر اساس آموزش داخل خود ایمکس است. و در آینده از ویدیو های اقای jekor حالا نمیدونم اسمشه یا نه که تو یوتیوب پیدا کردم استفاده خواهم کرد. پس این پست تکمیل خواهد شد.

لینک ویدیو های اصلی اقای jekor .

همچنین مشتاقانه انتظار دارم که خودتون هم اشتباه هایی که داشتم رو اصلاح کنید و جاهایی که کم گویی شده رو اضافه کنین. بنابراین هم کمک خواهید کرد و هم باعث میشید کامل تر بشه (پست ویکی خواهد بود) با سپاس از همتون. :pray::rose:


نصب و شروع ایمکس

خب برای شروع ایمکس رو باز میکنیم میگین نصبش؟ خب تو لینوکس راحتین و ایمکس تو اغلب مخازن های لینوکس موجوده و واسه ویندوز و مک نیز این لینک رو دنبال کنید https://www.gnu.org/software/emacs/download.html . حالا بعد از باز کردن ایمکس پنجره اصلی ایمکس باز خواهد شد . در این صفحه ما میتونیم اطلاعاتی از جمله ورژن ایمکسمون و همچنین سیستم عامل مورد استفاده مون رو ببینیم . که در آینده بیشتر در موردش بحث خواهد شد.

حال در صفحه اصلی درست جایی که کرسر پوینتر (cursor pointer) ماوس قرار داره بر روی emacs tutorial کلید اینتر رو وارد کرده تا وارد صفحه متنی بشیم. تا یه اموزش متنی خلاصه شده رو ببینیم… حال سعی کنید از ماوس استفاده نکنید همچنین toolbar های بالایی … درسته در اوایل کار یکم سختی خواهید کشید ولی در دراز مدت سرعت زیادی خواهید داشت.

ابتدا میخوایم این آموزش متنی خود ایمکس رو به صورت خلاصه شدیم بریم جلو. و در آخر هم چیز های دیگه اضافه خواهد شد.

عموما دستورات ایمکس شامل کلید کنترل (CTRL) و همچنین کلید meta یا همون (ALT) هستند که به جای نوشتن اونها در هر زمان از اموزش , از عبارت های مختصر استفاده میکنیم.

پس یه این شکل اگر ما <C-<chr رو بزنیم به معنی این که کلید کنترل رو تا زمان فشردن عبارت کلید دیگر نگه دارید. بدین ترتیب برای مثال ما CTRL + F رو میفشاریم.
به این شکل ctrl +f که در اینجا ( همان کاراکتر دومی است )

همچنین اگر ما از کلید های <M-<chr استفاده کنیم به معنی اینکه کلید Meta یا ALT رو با یه کلید دیگه بفشاریم اگر هر یک از این سه کلید وجود نداشت ما از کلید ESC باید استفاده کنیم . و بعد کلید یا همان عبارت کلید دوم رو وارد میکنیم ( همان کاراکتر دومی است )

خب اولین دستورمون C-v هستش که از الان لازمتون میشه (رفتن به صفحه بعد)

توضیحات بیشتر = خب وقتی ما صفحه ای که میخونیم رو تموم میکنیم و میخوایم به صفحه بعد بریم از CTRL + V استفاده میکنیم.
حالا تو ذهنتون میگید که اگه یه کلیدی باشه که باهاش به صفحه بعد میریم باید به کلید دیگه هم باشه که باهاش بشه به صفحه قبل رفت, خب اره این کلید هم هست با عبارت ترکیبی M-v یا Meta + V یا اگه هیچکدومش رو ندارید ESC رو بزنید // چند بار امتحانش کنید تا دستتون جا بیفته و دقیق بدونید منظورم از رفتن به صفحه بعد چیه .

خلاصه این درس .

  • با CTRL + V میشه یه صفحه رفت جلو .
  • با ALT + V یه صفحه میریم عقب
  • با CTRL + L هم حول محور کرسر بالا یا پایین خواهیم رفت … امتحانش کنید تا بفهمید چیه یعنی فضای بالا و پایین و وسط کرسر رو نماییش میده

کنترل های نشانگر

جابجا شدن در متن تمام صفحه ای که داریم با اروو کی ها (arrow key) ها صورت میگیره ولی میشه با

C-p رفتن به لاین بالا
C-b جایجا شدن به عقب یا همون چپ
C-f جابجا شدن به جلو یا راست
C-n رفتن به لاین پایین
نیز جابجا شد و استفاده کرد.

شما میتونید به راحتی کلید ها رو حفظ کنید چون p مخفف previous-line و b مخفف backward-char و f مخفف forward-char و n مخفف next-line .
اگه میخواید از اینا استفاده کنید … باید یکمی باهاش کار کنید و بهش عادت کنید .

خب حالا اگه فکر میکنید که حرکات حرف به حرف کند است میتوانید به جای ctrl از alt استفاده کنید تا کلمه به کلمه جابجا شوید (البته فقط برای جلو و عقب رفتن در جمله نه بالا و پایین)

حالا اگه بخواین که به اول یک لاین یا خط برین میتونید از C-a استفاده کنید و برای رفتن به انتهای لاین از C-e استفاده کنید .

ولیکن وقتی خواستین بین اول جمله(پاراگراف) یا اخر جمله جابجاشین از M-a و M-e استفاده کنید

که اینم خلاصه کلید هاست

  • C-f حرکت روبه جلو(حرف)

  • C-b حرکت روبه عقب(حرف)

  • M-f حرکت روبه جلو(کلمه)

  • M-b حرکت روبه عقب(کلمه)

  • C-n رفتن به لاین عقب (پایین)

  • C-p رفتن به لاین عقب (بالا)

  • C-a رفتن به اول خط

  • C-e رفتن به اخر خط

  • M-a رفتن به اول جمله

  • M-e رفتن به اخر جمله

و برای رفتن به اول صفحه (بافر) از >-M و برای رفتن به اخر صفحه از <-M استفاده میکنیم

خب اگر ایمکستون به دستوراتتون پاسخ نداد یه به نوعی فریز شد یا یه دستوری برای پاسخ طول کشید شما میتوانید به صورت امن خارج بشید که با کامند C-g صورت میگیره
و یا لغو کردن دستور هر دیگری مورد اسفتاده قرار میگیره (در بافر)

برای درج و حذف کلمات نیز که مثل ادیتور های دیگه با فشردن کلید ها حروف درج میشن و یا backspace نیز حذف میشن … کلید delete هم که میدونید از سمت راست پاک میکنه

  • backspace حذف کردن حرف قبل از cursor

  • C-d یا delete حذف کردن حرف بعد از cursor

  • M-backspace حذف کلمه قبل از cursor

  • M-d حذف کلمه بعد از cursor

  • C-k کیل (kill) کردن از cursor تا اخر خط

  • M-k کیل (kill) کردن از cursor تا اخر جمله

توجه داشته باشید تفاوت Kill کردن و Delete کردن در اینه که Kill کردن همان موارد Kill کرده رو میشه دوباره در همان جا سریعا اورد همان yanking یا همان cut و paste کردن است ولی Delete یعنی حذف کردن.

اگر چند بار روی سر هم کیل کردین اون همان کات کردن جمعی حواهد بود … و حال برای پیست کردن موارد یانک شده از C-y استفاده میکنیم

اینم اضافه کنم اگر شما از متنی که قبلنا کات کرده اید و میخواهید اون متن قبلی رو دوباره پیست کنید … نگران نباشید در حافظه ذخیره شده و شما میتوانید با alt-y استفاده کنید .

توجه کنید که برای undo کردن نیز باید از /-C استفاده کنید


فایل ها

برای پیدا کردن فایل ها و یا همان سرچ کردن یک فایل در پروژتون از کلید های ترکیبی C-x C-f میتوانید استفاده کنید . و مشاهده خواهید کرد که در پایین . مینی بافر منتظر دستور شماست … به یاد داشته باشید که اگر فایلتون وجود نداشت ایمکس خودش براتون فایل رو ایجاد خواهد کرد … و میدونید که برای لغو دستور سرچ از C-g استفاده کنید

خب برای سیو کردن فایل تون هم میتونید از دستور c-x c-s استفاده کنید .


بافر ها

ابتدا به تصویر بالا توجه بفرمایید.
frame لایه خارجی (بیرونی ترین قسمت) نرم افزار ایمکسه که بقیه لایه ها درون اون قرار گرفتند. لازم به ذکر است که این قسمت در سایر نرم افزارها, پنجره (window) نامیده می شه ولی این قاعده در نرم افزار ایمکس تفاوت داره.
ایمکس به صورت پیش فرض از یک پنجره (window) استفاده می کنه که چندین بافر (buffer) می تونند درون اون قرار بگیرند. از بافرها معمولا برای نمایش محتویات فایل ها و برای نمایش خروجی برنامه ها و سایر اطلاعات استفاده میشه.
point (که در تصویر با دایره سبز مشخص شده) محل فعلی مکان نمای ماست.
status bar یا نوار وضعیت شامل گزارشاتی فایل باز شده فعلی از جمله تعداد خطوط, تعداد کاراکترهای یک خط و … می باشد.
mini buffer محلی برای ورود کامندهای ماست.

حالا اینکه اگر شما فایل دیگری یا دومی را پیدا میکنید (منظور بعد سرچ) میتوانید بین آن ها سویییچ کنید… در مراحل دیگه میگم که چطور باید این کار رو انجام بدید ولی در ابتدا میتونید با دستور c-x c-b لیست های بافر های موجود را ببینید .

حالا با دستور c-x c-f یه فایل بسازید یا سرچ کنید ( فهمیدید که اگه فایل تون وجود نداشته باشه خودش ساخته میشه ) حالا وقتی وارد فایل جدید شدید میتوانید با کلید های c-x b و نوشتن نام فایل قبلی یا دلخواه همون و بعد زدن دکمه اینتر به فایل قبلی برگردید .
دقت داشته باشید که اسم بافرتون اغلب همان اسم فایل شماست ولی همیشه این اتفاق نمیافته و میتونید از همان کلید بالایی c-x c-b لیست بافرهاتون رو سرچ کنید و استفاده کنید
نکته = همچنین برای جابجا کردن بافر ها در یک فریم از C-x و arrow key (چپ و راست) ها میشه استفاده کرد. ( C رها نشود)


گسترش فرمان ها

فرمان های زیاد دیگری تو ایمکس وجود دارند
از جمله میتوان به یکی از ان ها برای ساسپند کردن ایمکس اشاره کرد C-z که بر خلاف کامند c-x c-c که کاملا از ایمکس خارج میشه ایمکس رو در حالت ساسپند قرار میده .

اینم باز یه حلاصه دیگر از دستورات:

  • C-x C-f پیدا کردن فایل
  • C-x C-s ذخیره فایل
  • C-x s سیو کردن بافرها
  • C-x C-b لیست بافر ها
  • C-x b جابجا شدن بین بافر ها
  • C-x C-c خارج شدن از ایمکس
  • C-x 1 حذف همه پنجره ها بدون یک پنجره (پنجره یا فریم فعلی)
  • /-C اندو Undo
  • /-C-f C ریدو Redo

ذخیره کردن اتوماتیک

اگر شما به اول و اخر فایلتان علامت نامبر ساین (#) رو بزارید ایمکس به صورت اتوماتیک در باره زمانی که داره سیو رو انجام میده به این شکل #sample.css#


mode line

خط پایینی که در ایمکس وجود داره اطلاعات مفیدی به شما میده … من جمله اسم فایلتون یا در چه فاصله از اول فایلیتون هستید … (به صورت درصدی)

و همچنین شماره ای که جلوی حرف L بعد از درصد هست نیز خطی که الان در اون هستید رو نشون میده … یا همون کرسرتون .

در اول خط نیز شما اگه یه دو ستاره ای ببینید یعنی اینکه شما فایل رو ویرایش کردید ولی سیو نکردید … و بلافاصله بعد از سیو ان دو ستاره از بین خواهند رفت.

و همچنین در اخر line mod میبینید که در پارانتز نوشته fundemental و این یعنی اینکه این فایل یک چیز اساسی است یعنی نوعش همگانی بوده و به زبانی یا تکنولوژی خاصی ربط نداره … که در ایمکس major-mode های زیادی وجود داره که مثلا اگر شما از یک تکست معمولی استفاده میکنید یا همون زبان انسان … بهتر است که از major -mode تکست استفاده کنید …

برای تغییر ان باید به این شکل عمل کنید M-m text-mode

همچنین هر major mode برای خودش داکیومنتیش خاص خودش رو داره که شاید هر میجر مدی کلید هاشون با هم کمی فرق داشته باشن و مخصوص ان ساخته شده باشند برای دیدن داکیومنت میجر مد
از C-h m استفاده میکنیم

هر میجر مدی میتواند قابلیت های خودش رو داشته باشه که میتوان از تو داکیومنتش ان را فعال کرد .
و حالت کلی از بافر ها رو مدیریت میکنه.

manor-mode هم هست که اونم میتونه چند تا قابلیت در major-mode و بافر فعلیمون ایجاد کنه .
برای مثال میشه برای هر بافرمون در سمت چپ شماره خط هارو نشون بده .یا auto-complete یا مثلا چه میدونم یه ویژگی دیگه که تو سایر ویرایشگر ها و ide ها میبینید که باعث میشن کارها راحت تر باشه .


echo area

این بخش هم وقتی با ایمکس تعامل داریم زیر line area باز میشود و دستورات ردو بدل میشود


جستجو کردن

خب ایمکس دارای یه سرچ قوی و به صورت ریل تایم میباشد…
برای انجام عملیات سرچ باید از کلید C-s استفاده کنید …
حال اگه کلمه ای که سرچ کردید در متن زیاد تکرار شده باشه … میتونید دوباره C-s را بزنید تا به کلمه بعد برید … و اگر خواستید از پایین به بالا سرچ انجام بگیره از C-r کمک بگیرید برای پایان دادن سرچ هم میتوانید از اینتر استفاده کنید یا برای لغو علیات سرچ دوباره از همون دستور C-g استفاده کنید .
اگه شما مطمئن هستید چیزی که تایپ میکنید بالاتر از کرسر شماست یا میخواهید سرچ از پایین به بالا برای سرچ کردن به جای C-s از C-r استفاده کنید .


پنجره های چند گانه

یکی از ویژگی های خوب که ایمکس که داره مالتیپل ویندوز یا همون فریم هست و این ویژگی به صورت کاملا خوب پیاده شده .

خب برای اینکار ابتدا cursor pointer رو بزارید روی متن مورد نظرتون بعد به ترتیب کنترل های C-l C-l رو بزنید … و بعد C-x 2 رو بزنید تا صفحه ایمکستون به دو قسمت جدا بشه

خب حالا چند تا کلید هست که کار شمارو در کار با پنجره های چند گانه کمک میکنه . برای مثال کلید های C-M-v باعث میشه به پایین صفحه اسکرول کنید (اسکرول کردن به پایین صفحه ای که باز شده و صرفا کرسرتون در ان نیست و فقط براتون رفرنس هست و میخونیدش)

وهمچنین C-x o هم باعث میشه بین صفحه هاتون جابجا بشید یعنی از پایینی به بالایی و از بالایی به پایینی سوییچ کنید . در ضمن اون او هست نه صفر :joy::grin:
و همچنین میتونید در هر پنجره ای برای بالا و پایین امدن (اسکرول کردن) از کلید های C-v و M-v استفاده کنید که در بالای اموزش ها نیز گفته شد .

و همچنین این هم یک روش جالب و خوب دیگه برای بازکردن پنجره دیگر ولی اینبار با فایلی که شما سرچ میکنید و یا تازه میسازینش .
ان هم با این روش C-x 4 C-f و حالا در بافر پایین از شما اسم فایلی که میخواید سرچ کنید رو مینید … که اگر وجود داشت باز میاره و وجود نداشت خودش میسازه
و اگه باز C-x o رو بزنید برمیگردید به صفحه قبلی و با C-x 1 هم اون فایلی که تازه بازکردید در پنجره حذف میشه .

یادتون باشه کهC-x 2 صفحه رو به صورت افقی تقسیم میکنه . و C-x 3 هم صفحه رو به صورت عمودی تقسیم میکنه .


فریم ها

frame لایه خارجی (بیرونی ترین قسمت) نرم افزار ایمکسه که بقیه لایه ها درون اون قرار گرفتند. لازم به ذکر است که این قسمت در سایر نرم افزارها, پنجره (window) نامیده می شه ولی این قاعده در نرم افزار ایمکس تفاوت داره.


راهنمای خود ایمکس

حال شما وقتی یک کلیدی رو یادتون رفته که چیکار میکنه یا میخواین بدونین کار اون کلید چیه شما میتوانید به این صورت عمل کنید … کلید دلخواه C-h c

برای مثال C-h c C-p که این مسیج رو در بافر نمایش میده

 C-p runs the command previous-line

و اگه میخواین توضیحات بیشتری داشه باشید میتونید به این صورت عمل کنیدC-h k C-p در اینجا به جایc عبارت k قرار گرفته شده.

که این مسیج رو میده

This displays the documentation of the function, as well as its name,
in an Emacs window.  When you are finished reading the output, type
C-x 1 to get rid of that window.  You do not have to do this right
away.  You can do some editing while referring to the help text, and
then type C-x 1.

همچنین کیبورد C-h a هم هستش که اگر بزنید در بافر یه چیزی نمایش میده و از تون میخواد هر چی دستور یا کلمه ای که میخواین دنبالش بگردین رو بنویسید تا در تمام دستورات براتون بگردم و بهتون نمایش بدم .

یاداوری برای حذف کردن پنجره help میتوانیدC-x 1 بزنید .

و همچنین برای اسکرول کردن صفحه help میتوانید از C-M-v استفاده کنید .


یک قدم فراتر :slight_smile:

خب اول برای تغییر فونت و سایز متن های ایمکس میتونیم به این صورت عمل کنیم .

ابتدا در ترمینال این دستور روز میزنیم mv ~/.emacs ~/.emacs.old
وبعد “emacs --font DejaVu Sans Mono 14” که میتونید خودتونم تغییر بدید و به جای 14 که سایز فونت هست عدد دلخواه رو وارد کنید و به جای DejaVu Sans Mono نام فونت خودتون رو وارد کنید . البته این تغییر موقتی خواهد بود . و در جلوتر بهتون نشون میدم که چطور این تغییرات رو برای همیشه داشته باشید .

خب اون توضیحات بالایی شمارو در حد مقدماتی با ایمکس اشنا کرد . حالا باز میخوام چند مورد دیگر نیز بهتون نشون بدم که شما به راحتی بتونید در داخل ایمکس , ایمکس رو یاد بگیرید . یادتون باشه که همه کامند های کمکی در ایمکس با C-h شروع میشن که بعضی از اون ها در بالا بهتون گفته شد . الانم یه دونه دیگه که خیلی بدردتون خواهد خورد C-h i هستش که به دایرکتوری اطلاعات (info directory) معروف است .

خب ببینید اول اینکه در این info dir که ما هستیم برای سهولت خوندن , یه چند تا کلید در نظر گرفته شده . از جمله q برای خروج ? برای لیست کردن همه کامند ها و d برای بازگشت به همین info dir . و در اخر فشردن کلید m و بعد نوشتن Emacs که شمارو به دفترچه راهنمای ایمکس میبره . و همچنین کلید u برای بازگشت به یک صفحه قبلتر و l برای رفتن به یک صفحه جلوتر از info dir .

خب در اینجا ابتدا میخوایم دستور M-x رو براتون توضیح بدیم … متا ایکس (ALT-x) مربوط به دستوراتی میشه که با اسمشون صدا زده میشه . خب این یعنی چی ؟ یعنی عملیات هایی که با فشردن کلید های M-x و بعد ان نوشتن اسم دستوراتی که میخوایم اجرا شوند (فانکشن ها) … خب این کلید بسیار مهم و کاربردی میباشد . از ان جایی که بعضی وقت ها شما کلید ترکیبی رو یادتون رفته یا یک عملیات در ایمکس کلید ترکیبی نداشته باشه . M-x به دادتان خواهد رسید . در جلو مثال هایی زده خواهد شد تا بهتر درک شوند .

خب از اونجایی که شاید شنیده باشید ایمکس در داخل خودش گیم هم داره . بریم ببینیم اصلا چی به چیه .
حب برای این کار در info dir کلید M-x رو فشار داده و بعد animate-birthday-present رو تایپ کرده و enter رو میزنیم … یادتون باشه چند کلمه اول رو که زدید بعد TAB رو بزنید تا خودش براتون کامل کنه . و بعد یه اسمی میخواد ازتون که برای مثال اسم خودتون رو بزنید و میبینید که :


خب این بازی نیست که ما میخوایم و بریم یه چیز دیگه امتحان کنیم …
خب وقتی میزنیم u تا برگردیم به صفحه قبل , میبینید که دستور رو تایپ میکنه و برنمیگرده . خب دلیلشم اینه که ما الان تو info dir نیستیم . و اگه به پایین mode line نگاه کنید مبینید که نوشته (fondemental) که نشانگر اینه که mode بافرمون fondemental هستش .
خب برای اینکه خارج بشیم از این بافر موقتی باید دوباره از M-x استفاده کنیم . خب برای اینکار اول M-x رو میزنیم و بعد kill-buffer رو تایپ کرده و اینتر رو میزنیم .
نکته = از انجایی که از kill_buffer زیاد استفاده خواهیم کرد یه شورتکات هم میتونیم استفاده کنیم اونم این عبارت ترکیبیه C-x k است و وقتی زدیم بعدشم یه اینتر میزنیم و خلاص . برمیگردیم به صفحه اول .
خب بزارید یه بازی دیگه رو امتحان کنیم .
بیاید بزنیم M-x blackbox
خب وقتی زدیم بازی عه میاد بالا .
خب شما در mode line پایین میبینید که هم manor mode و همچنین buffer میبینید که نوشته blackbox . و برای اینکه اطلاعاتی در مورد این باز ی و همچنین بافر داشته باشید . میتونید از C-h m استفاده کنید . و میبینید که راهنما در پایین پنجره باز میشه . خب طبق گفته بالا برای سوییچ کردن به پایین راهنما C-x o رو میزنیم . و میتونید تمام اطلاعات مربوط به بازی رو بخونید و بازی کنید .


شخصی سازی

خب درسته ایمکس بسیار قوی و محبوب و سریعه ولی میتوان با یکمی دستکاری تو ظاهرش دلبرترش کرد . یکی از ویژگی خوب ایمکس قابلیت شخصی سازی بسیاری زیاد است .

برای ورود به بخش شخصی سازی ابتدا دستور M-x رو میزنیم و بعد در مینی بافر customize رو میزنیم تا به بخش customization وارد شویم .
خب اولین کاری که میشه انجام داد اون نوار بالایی هست که باعث میشه فضای بیخودی اشغال بشه .
برای حذف کردنش ابتدا به قسمت Environment در بخش پایینی صفحه customization میریم و بعد بخش frames رو پیدا میکنیم و با زدن کلید enter واردش میشیم … و بعدش به قسمت Menu Bar Mode رفته و در قسمت Toggle کلید کرده تا قسمت on به off تبدیل بشه . خب الان میبینید که هنوز اون منو بالایی هنوز سر جای خودش باقی مونده .
خب وقتی پایین toggle نگاه میکنید میبینید کنار state نوشته شده که این تنظیمات ویرایش شده و میگه تا زمانی که ذخیرش نکنید تاثیری بر ایمکستان نخواهد داشت . پس ما هم روی state اینتر رو میزنیم و و در پایین براتون یه چند تا گزینه باز میشه و شما برای ذخیره برای همیشه کلید 1 رو بزنید تا ذخیره بشه . و میبینید که منو حذف شده.
حالا وقتی در پایین به مینی بافر نگاه میکنید میبینید که در یه مسیری تغییر ایجاد شده … میگین بیایم به فایل emacs. نگاه کنیم و ببینیم چه اتفاقی افتاده . خب برای اینکار کلید های C-x C-f رو میزنیم و بعد مینویسیم emacs. که وقتی صفحه جدید باز میشه میبینید که menu-bar-mode برابر با nil قرار گرفته .

در ضمن همه تغییرات شما در اینجا ذخیره میشن … حالا بیاین این بافرو kill کنیم و برگردیم سر اصل مطلب .
دوستان حالا بیایم همون بلا رو این بار سر Tool Bar Mode بیاریم … چون نمیخوام اموزش طولانی بشه . دیگه اینبار خودتون انجامش بدین .و میبنید که تولبار بالایی حذف میشه که بازم بهمون بیشتر فضا میده و این خوبه .

حالا بیاین همه بافر های باز شده رو kill کنیم و به بخش اصلی customization خودمون بریم و اینبار داخل Faces
میشیم . و اول میریم سمت Basic Faces و بعد گزینه ششمی default رو میزنیم و فونتی که تو قسمت یک گام فراتر عوض کردیم رو میبینیم و بهتون گفتم که بعدا میگم چطور به طور کامل سیو و عوضش کنید . خب این جا هم مثل روش قبلی میتونید عمل کنید و با زدن گزینه save for future feature یعنی گزینه شماره 1 اون رو برای همیشه ذخیره کنیم . و بنابه این قرار میتونید بخش های دیگه هم بر اساس سلیقتون تغییر بدید .

حالا میخوایم بریم سراغ theme . که در سرچ باکس بالا مینویسیم theme و بر روی سرچ کلیک میکنیم تا بخش های مربوط به theme برامون باز بشن .
ولی میبینیم که هیچ پیش نمایش از تم ها برامون نیست پس دوباره سراغ M-x رو میگیرم و بعد از متا ایکس عبارت customize-themes رو وارد میکنیم و بعد تم های مختلفی رو میبینیم . و با رفتن به هر یک از اونها و بعد زدن کلید enter تم خودمون رو عوض کنیم .
ولی میبینید که با اینکه یک تم dark انتخاب کردید ولی صفحه پنجرتون همچنان سفید باقی میمونه . خب برای رفع این مشکل به ترتیب به این صورت عمل میکنیم .
اول M-x و بعد جلوش عبارت customize-group رو میزنیم و حالا باز جلوی اون دوباره میزنیم basic-faces . و بعد دوباره enter رو میزنیم . و بعدش در قسمت defailt در بخش foreground و background تیک هردوشون رو برمیداریم و بعد ذخیرش میکنیم . و بلافاصله بعد ذخیره میبینیم که تممون سیاه میشه . (البته اگه تم دارک انتخاب کردید)
توجه : یادتون نره گزینه بالایی save theme setting رو بزنید . تا ذخیره بشه .

حالا اگه سلیقه داشته باشین میتونین مثل fg42 اقا سمیر خوشگلش کنید . که اون سلیقرو متاسفانه من ندارم :grin::sweat_smile:

همچنین میتونید با ± C-x C اندازه فونتتون رو کوچیکو بزرگ کنید .


نصب پکیج ها و افرونه ها

به طور پیشفرض ایمکس برا خودش پکیج هایی رو داره و ما میتونیم حتی بیشتر از اونم براش نصب کنیم .
برای لیست کردن پکیج ها میتونیم از دستور M-x list-packages استفاده کنیم .
برای مثال ما میخوایم پکیج org رو نصب کنیم که یه افزونه برای نگه داشتن تکست ها و TODO هاتون است (برای اطلاعات بیشتر داکیومنتش رو بخونید) بعد از پیدا کردنش روی کلید enter رو میزنیم و بعدش روی install میزنیم و صبر میکنیم تا نصب بشه … تا این حد راحت :slightly_smiling_face:

خب ایا این حد پکیج برامون کافی خواهد بود؟ معلومه که نه . ما میتونیم برا خودمون یه ارشیو دیگه از پکیج هارو به این لیستمون اضافه کنیم .
ابتدا با دستور M-x costomize-group وارد کاستومایز گروپ میشیم و بعد بلافاصله دستور package رو جلوش وارد میکنیم . و بعد enter که بتونیم واردش بشیم .
حالا در بخش package group وارد بخش package archive میشیم و میبینیم که در url از مخازن elpa یا همون مخفف کلمه emacs list package archive است خب از ان جایی که melpa بزرگترین ارشیو پکیج هارو داره . میایم که اونو نصب کنیم .
برای اینکارم در پایین package archive به دکمه کوچولو هست که نوشته ins اونو که زدیم یه بخش جدید برامون باز میشه مثل بالایی و ازمون میخواد اسم و url جدید که میخوایم وارد کنیم رو بزنیم .
پس برای اسم میزنیم melpa و در بخش url این ادرس رو قرار میدیم

https://stable.melpa.org/packages/

حالا ذخیرش میکنیم مثل دفعات قبل (دکمه state) و بعد باز M-x list-packages رو میزنیم و میبینیم که پکیج های زیادی اضافه شده اند .
توجه : برای اپگرید کردن پکیج های کافیه shift-u رو بزنید تا تمام پکیج هایی که اماده اپگریدن نشان دار شوند و بعد کلید x رو میزنیم تا در مینی بافر از شما سوال شود که ایا میخواهید اپگرید شوند؟ میتوانید جواب yes یا no رو بزنید . و بعد عملیات دانلود از شما میخواد که ایا پکیج قدیمی رو حذف کنه یا نه ؟ که باز میتونید پاسخ خودتون رو وارد کنید .
نکته خیلی مهم : یادتون باشه که باید در فایل emacs. یه خط کد رو اضافه کنید .
به این شکل که ابتدا باز با C-x C-f فایل emacs. رو پیدا کنید و این خط کد رو به اولش اضافه کنید

(package-initialize)

چون اگر تمی نصب کنید یا هر چیز دیگه ای ایمکس اون پکیچ هارو هنوز از melpa میخونه و باعث میشه پکیج ها لود نشوند .

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


جستجو کردن فایل های سیستم با dired

دوستان قبلا ما که برای پیدا کردن فایل مورد نظرمون از C-x C-f استفاده میکردیم .
و اگه فایلی هم رو نمیدونستیم کجاست باید اول به home میرفتیم و بعد مراحل پیش رو رو طی میکردیم تا به فایل مورد نظرمون برسیم . از انجا که در پایین میبینید مد این بافر dired هست . و این باعث میشه بعضی ویژگی خاص خودش رو داشته باشه .
یکی از این ویژگی های اینه که بعد از گشت و گزار در بین فایل ها ما میتوانیم با کلید d و بعد با زدن کلید x و بعد تایید دستور فایل مورد نظر رو حذف کنیم . (با زدن کلید d روی چند فایل میتوانیم به صورت چند گانه فایل مورد نظر رو نشان دار کرده و بعد کلید x رو بزنیم و بعد حذف کنیم تا همشون باهم حذف شوند)

  • همچنان میتواند با کلید + یک فولدر جدید بسازید .
  • میتوانید با رفتن روی هر فایلی و زدن کلید ! و بعد انتخاب روش باز کردن ان … فایل مورد نظر رو باز کرد . برای مثال firefox
  • میتوانیم از فایلی کپی بگیریم . با کلید های shift-c و انتخاب نام جدید و بعد زدن اینتر
  • با کلید m میشه چند فایل رو نشان دار کرد و بعد عملیات مورد نظر رو پیاده کرد
  • با کلیدu میتوان فایل نشان دار شده رو نشان دار نشده کرد (همون unmark :joy:) و با shift-u همشون رو انمارک کرد .
  • با کلیدt میشه همه فایل یک فولدر رو نشان دار کرد .
  • با r میشه نام فایل رو عوض کرد
  • با s میشه فایل ها رو مرتب کرد .(هر بار s باعث میشه به شکل متفاوتی sort بشه)

توجه داشته باشید که کلید های بیشتری برای کار با dired هست و اینا فقط چیزای پایه و ضروری بودند . پیشنهاد میشه از info dir بیشتر راجع بهش مطالعه کنید .


مدیریت و پیدا کردن بافر ها

وقتی در دراز مدت از ایمکس استفاده میکنید باید چند روش جدید و بهینه تر برای کار کردن با بافر ها پیدا کنید .
همینطور که میدونید با C-x b میتونید بافر رو باز کنید و با زدن TAB همه بافر هارو ببینید . ولی وقتی میبینید متوجه میشید که این همه بافر ها نیستند و برای دیدن همه بافر ها از C-x C-b استفاده کنید تا دقیق تر ببیینید .
از اون جایی که یاد گرفتیم . میتونیم با C-x 0 بافر جدیدمون رو در کل فریم بگنجانیم (فول اسکرین).
همچنین مثل dired میتونیم با کلید d بر روی هر بافر و بعد زدن دکمه x ان بافر یا بافر ها رو kill کنیم .
ولی وقتی بافر ها در زمان های اینده زیاد شدن (حتی بعضا 3000 بافر) شما نمیتونید تک تک kill شون کنید . از اینجا میتونید با زدن کلید های M-x و بعد جلوش clean-buffer-list رو بزنید تا همه بافر ها kill بشن . (بافر های بیش از اندازه باعث کندی در ایمکس خواهد بود ) .
ولی وقتی یکم بین بافر ها جابجا بشیم , میفهمیم که ان چنان هم سریع تر و بهتر نمیشه جابجا شد . در اینجا می میخوایم از ido-mode استفاده کنیم .
از اونجایی که واقعا ido-mode برام عجیب بود . و یکم گیج کننده . توصیه میکنیم ویدیو اصلی رو خودتون ببینید تا
بهتر درک کنید
برای فعال کردن ido-mode به این شکل عمل میکنیم :
M-x ido-mode
با این کار ido-mode فعال خواهد شد . و ما با زدن C-x b میبینیم که ظاهر قبلی عوض شده . حالا چند روش برای کار کردن و بهتر کردن ido-mode انجام بدیم.
نکته یادتون باشه ido-mode رو در بخش customize سیو کنید . (دیگه این کار زیاد تکرار شده و بهتره خودشون انجامش بدین) .
در ضمن یادتون باشه که ido-mode درسته در اول یکم گیج کنندس ولی اونیکه ویدیو رو ساخته میگه جلوتر کمک شایانی بهتون میکنه. :grin:
و در اینجا این مبحث رو تموم میکنم و بازم میگم ویدیو اصلی رو ببینید . با عرض پوزش .:slightly_smiling_face::pray:


مجموع کلید های مفید و پر استفاده

  • M-x replace-string پیدا کردن و جایگزین کردن یک رشته .
  • M-x goto-line رفتن به یک خط مشخص شده .
  • M-x column-number-mode نشان دادن شماره ستون جاری.
  • C-w کات کردن
  • M-w کپی کردن
  • C-y پیست کردن
  • C-x s ذخیره کردن
  • C-x c ذخیره همه و خارج شدن
  • M-b رفتن به اول کلمه
  • M-f رفتن به اخر کلمه
  • C-a رفتن به اول جمله
  • C-e رفتن به اخر جمله
  • C-p رفتن به لاین قبلی
  • >-M رفتن به اول بافر
  • <-M رفتن به اخر بافر
  • C-x C-f پیدا کردن فایل
  • C-x b سوییچ کردن بین بافر ها
  • C-x k کیل کردن بافر (kill)
  • C-x 2 بریدن ویندوز به صورت عمودی
  • C-x 3 بریدن ویندوز به صورت افقی
  • C-x o سوییچ کردن بین ویندوز ها
  • C-x 0 کشتن ویندوز فعلی
  • C-x 1 کشتن همه ویندوز های دیگر
  • C-s جستجو در پنجره فعلی
  • C-r جستجو در پنجره فعلی (به صورت backward)
  • /-M کامل کردن اتوماتیک کلمه
  • C-j رفتن به خط جدید
  • M-x shell باز کردن ترمینال

How-to-Learn-Emacs8-640x480

14 Likes

بسیار عالی فقط اگه می شه پست رو به صورت ویکی در بیارید که من یه سری ادیت انجام بدم.

3 Likes

من یه سری تغییرات دادم. اگر زحمتی نیست با توجه به اونها بقیه رو هم درست کن. مثلا تایتل ها رو باید با استفاده از # بسازی. وقتی یه shortkey رو می نویسی باید C رو به صورت بزرگ بنویسی که مشخص شه منظور کنترل هست. و همین مورد برا meta و super هم صادق هست.

3 Likes

چشم حتما …
قطعا هم از لحاظ ظاهر بهترش میکنم هم از لحاظ بار علمی که داره … فقط گفتم بزارم تا کم کم تکمیل بشه :v:

3 Likes

طاهر جان سلام :rose:
خیلی ممنوووون از اینکه آموزش ایمکس رو نوشتی و خیلی خوشحال شدم که خودت زحمتش رو کشیدی… واقعا عالیه … خسته نباشید :heart_eyes::heart_eyes::heart_eyes:

2 Likes

خیلی ممنون هادی عزیز … :rose:
امیدوارم بهتر از اینا بشه …
در اینده منتظر trick های مفید ازت هستم …
ممنون که پیام دادی :heartpulse::heartpulse:

2 Likes

360h

دوستان ایمکسی, خوندن این کتاب رو شدیدا پیشنهاد می کنم…
از سطح بسیار مبتدی شروع کرده و گام به گام ایمکس رو براتون توضیح میده.
کتاب رو به صورت آنلاین میتونید بخونید فقط و فقط آدرس ایمیل و رمز عبورتون رو وارد کنید. (عضویتش کمتر از ۳۰ ثانیه زمان میبره)…
برای دیدن کتاب روی تصویر کلیک کنید.

5 Likes

آقا سمیر @lxsameer شرمنده, میشه اسم اون پلاگینی که ابتدا و انتهای یک تگ رو به صورت خط چین مشخص کرده بگید. به این شکل:

<div>
|
|            <a>
|             |
|            </a>
|
</div>

توی تصویری که طاهر جان گذاشته هم معلومه…
توی ویم داشتمش ولی اینجا هر چقدر گشتم پیداش نکردم.
خیلی ممنون.

1 Like

اون چیزی که میبینین highlight-indent-mode هست که من یه خورده تغییرش دادم. اما من whitespace-mode رو پیشنهاد می کنم که خودم به زودی جایگزینش می کنم. پرفرمنس خیلی بهتری داره

2 Likes

سلام دوستان کد Ruby روی توی Emacs چطور Run می کنید؟
inf-ruby نصب کردم ولی فقط برام شل روبی رو باز می کنه.
می خوام یه حالتی باشه مثل پایتون خروجی کد رو نمایش بده…
توی پایتون C-c C-z میزنم شل پایتون باز میشه و بعد از اون C-c میزنم اجرا میشه اگه کسی ایده ای داره خیلی ممنون میشم راهنمایی کنه…
(حل شد)
راه حل:
برای اجرای دستورات زبان های مختلف می تونید از پلاگین quickrun استفاده کنید:

M-x quickrun

بعد از این کار دستور زیر رو:

(global-set-key (kbd "<f5>") 'quickrun)

به مسیر emacs.d.init.el اضافه کنید. از این به بعد هر فایلی که باز کنید مثلا example.rb, example.py با زدن کلید F5 می تونید اون رو اجرا کنید.

2 Likes

واقعا عالی بود ممنون :+1:

1 Like

اینکه emacs یکی از قدرتمندترین ادیتورهای حال حاضره شکی نیست همچنین در کنارش خیلی از افراد و دوولوپرهای مهم دنیا هم ازش بعنوان نه تنها یک ادیتور بلکه یک سیستم یکپارچه برای ساخت و ادیت هر نوع کد و … یاد میکنند.(بیشتر شبیه یک سیستم عامله تا ادیتور :slight_smile:)

یکی از کانفیگ های مهم و البته خوشگل :‌) emacs که تو نت پیدا کردم spacemacs هست اگر خواستین میتونین ازش استفاده کنید.

4 Likes

من هم کانفیگ doom emacs رو توصیه می‌کنم. قابلیت‌های جالبی داره و از اسپیسمکس سریع‌تره.

1 Like

عالیه ! ‌:‌)

1 Like