שיעור ראשון בשימוש ב־‫Emacs‬. זכויות שימוש ראה בסוף המסמך. פקודות רבות של Emacs משתמשות במקש CONTROL (בדרך־כלל מסומן ב־CTRL) או במקש META (בדרך־כלל מסומן ALT). במקום לציין את כל השמות האפשריים בכל פעם, נשתמש בקיצורים הבאים: ‏<תו>-C משמעותו לחץ והחזק מקש CONTROL ואז הקש על מקש <תו>. לדוגמא, C-f משמעותו: לחץ והחזק CONTROL והקש על f. ‏<תו>-M משמעותו לחץ והחזק מקש META או ALT ואז הקש על מקש <תו>. אם במקלדת אין אף אחד ממקשי META או ALT, אפשר להקיש ולשחרר מקש ESC ואז להקיש <תו>. אנו נכתוב עבור מקש ESC. הערה חשובה: כדי לצאת מ־Emacs יש להקיש C-x C-c (שני תוים, משמאל לימין). כדי להפסיק פקודה באמצע ההקשה, יש להקיש C-g. כדי להפסיק שיעור זה, יש להקיש C-x k, ואז בתשובה לשאלה. המחרוזת ">>" בקצה הימני מסמנת הוראות עבורכם כדי לנסות להשתמש בפקודה כלשהי. לדוגמה: <<שורות ריקות תתווספנה סביב השורה הבאה ע״י help-with-tutorial>> [אמצע העמוד הושאר ריק למטרות לימודיות. הטקסט ממשיך להלן] >> הקישו עתה C-v (הצג העמוד הבא) על־מנת לגלול תצוגה לעמוד הבא. (קדימה, נסו זאת ע״י לחיצה והחזקה של מקש CONTROL והקשה על v.) מעתה והלאה, עליכם לעשות זאת בכל פעם שתסיימו לקרוא את המוצג על המסך. שימו לב לחפיפה של שתי שורות כאשר אתם עוברים ממסך למסך, מה שמבטיח רציפות מסוימת בעת קריאת הטקסט. הטקסט שלפניכם הינו עותק של שיעור בשימוש ב־‫Emacs‬ שהותאם קלות עבורכם. בהמשך תקבלו הוראות לנסות פקודות שונות כדי לבצע שינויים בטקסט הזה. אם במקרה תשנו את הטקסט לפני שנבקש, אל דאגה: זוהי "עריכה" שהיא יעודו של Emacs. דבר ראשון שעליכם ללמוד הוא כיצד לנוע ממקום אחד למשנהו בתוך הטקסט. אתם כבר יודעים כיצד להתקדם לעמוד הבא, עם C-v. לחזרה לעמוד הקודם הקישו M-v (החזיקו מקש META והקישו v או הקישו ‪v‬ אם אין במקלדת מקש META או ALT). >> נסו עתה כמה פעמים להקיש M-v ואחר־כך C-v. אפשר לגלול טקסט גם באמצעים אחרים, אם אתם יודעים כיצד לעשות זאת. * סיכום עד כאן -------------- לשם תנועה בעמודים שלמים וצפייה בהם, השתמשו בפקודות הבאות: ‏C-v התקדם לעמוד הבא ‏M-v חזור לעמוד הקודם ‏C-l נקה תצוגה והצג מחדש את הטקסט, כך שהטקסט ליד הסמן יימצא במרכז התצוגה (שימו לב: CONTROL-L ולא CONTROL-1.) >> מצאו את הסמן על־גבי התצוגה וזכרו את הטקסט לידו. לאחר מכן הקישו C-l. מצאו את הסמן שנית ושימו לב שהוא עדיין ליד אותו הטקסט, אבל עכשיו הוא במרכז התצוגה. אם תקישו C-l שוב, קטע הטקסט הזה יזוז לקצה העליון של התצוגה. הקישו C-l שוב והוא יזוז לתחתית התצוגה. גם מקשי PageUp ו־PageDn, אם הם קיימים במקלדת שלכם, יכולים לשמש לתנועה בעמודים שלמים, אולם השימוש ב־C-v ו־M-v יעיל יותר. * תנועת סמן בסיסית ------------------ תנועה בעמודים שלמים הינה שימושית, אבל כיצד ניתן להגיע למקום ספציפי בתוך הטקסט שעל־גבי התצוגה? ניתן לעשות זאת בכמה דרכים. אפשר למשל להשתמש במקשי החצים, אולם יהיה זה יעיל יותר אם תחזיקו את הידיים מעל החלק הסטנדרטי של המקלדת ותשתמשו בפקודות C-p, C-b, C-f ו־C-n. פקודות אלו שוות ערך לארבעת מקשי החצים, כדלקמן: שורה קודמת, C-p : : קדימה, C-f ... מיקום סמן נוכחי ... אחורה, C-b : : השורה הבאה, C-n >> השתמשו במקשי C-n ו־C-p על־מנת להגיע לשורה האמצעית של הדיאגרמה. הקישו C-l כדי למרכז את הדיאגרמה על־גבי התצוגה. קל יותר לזכור את המקשים הללו באמצעות המלים שהם מייצגים: P מ־previous (קודם), N מ־Next (הבא), B מ־Backward (אחורה) ו־F מ־Forward (קדימה). מקשי התנועה הבסיסיים הללו ישמשו אתכם כל הזמן. >> הקישו C-n כמה פעמים כדי למקם את הסמן בשורה זו. >> הניעו את הסמן בתוך השורה עם C-f ואחר־כך למעלה עם C-p. שימו לב מה עושה C-p כאשר הסמן נמצא באמצע השורה. כל שורה של טקטס מסתיימת בתו מיוחד הנקרא Newline. תו זה מפריד בין השורה לזו שאחריה. (בדרך כלל, השורה האחרונה בקובץ תסתיים אף היא ב־Newline, אך Emacs אינו זקוק לכך.) >> נסו C-b בתחילת שורה. הוא יגרום לסמן לנוע לסוף השורה הקודמת. זאת, משום שהוא נע אחורה וחולף על־פני תו ה־Newline. גם C-f יכול לחלוף על־פני Newline, בדיוק כמו C-b. >> הקישו C-b עוד כמה פעמים כדי לקבל הרגשה היכן נמצא הסמן. עתה הקישו C-f מספר פעמים הדרוש לשוב לסוף השורה. ואז הקישו C-f עוד פעם אחת כדי לנוע לתחילת השורה הבאה. כשהסמן יוצא מגבולות הטקסט המוצג, חלקי הטקסט מעבר לחלק המוצג נכנסים לתצוגה. לזה קוראים "גלילה". גלילה מאפשרת ל־Emacs להניע את הסמן למקום כלשהו בטקסט מבלי שהסמן ייעלם מהתצוגה. >> נסו להניע את הסמן אל מחוץ לתצוגה ע״י הקשת C-n ושימו לב למה שקורה. אם תנועה תו־תו איטית מדי, תוכלו לנוע מילים שלמות. M-f ‏(META-f) מזיז את הסמן מילה אחת קדימה ואילו M-b זז מילה אחורה. >> הקישו M-f ו־M-b מספר פעמים. אם הסמן נמצא באמצע מילה, M-f זז לסוף המילה. אם הסמן נמצא בין שתי מלים, M-f עובר את המילה הבאה ונעצר בסופה. M-b פועל באופן דומה בכיוון הפוך. >> הקישו עתה M-f ו־M-b פעמים אחדות, וגם C-f ו־C-b פה ושם כדי שתוכלו להתרשם מהתוצאה של M-f ו־M-b במקומות שונים בתוך ובין המלים. שימו לב להקבלה שבין C-f ו־C-b מצד אחד ו־M-f ו־M-b מהצד השני. לעתים קרובות מאד מקשים עם META משמשים לפעולות הקשורות ליחידות של שפה (מלים, משפטים, פסקאות) ואילו מקשים עם CONTROL פועלים על יחידות בסיסיות שאינן תלויות בסוג הטקסט שהינכך עורכים (תוים, שורות, וכד'). ההקבלה הזאת קיימת גם לגבי שורות ומשפטים: C-a ו־C-e נעים לתחילת השורה וסופה, בהתאמה, ואילו M-a ו־M-e נעים לתחילת המשפט וסופו. >> נסו עתה שתי הקשות על C-a ואחר־כך שתי הקשות על C-e. נסו שני M-a ואחר־כך שני M-e. שימו לב שחזרה על C-a אינה עושה דבר, ואילו כל הקשה חוזרת על M-a מניעה את הסמן במשפט נוסף. אמנם אין כאן אנלוגיה מושלמת, אבל התוצאה נראית טבעית בשני המקרים. מקום הסמן בתוך הטקסט נקרא "point" ("נקודה"). במלים אחרות, הסמן מראה את מיקומו של "point" בתוך הטקסט. הנה סיכום של פקודות פשוטות להנעת הסמן, כולל פקודות שנעות במלים ומשפטים שלמים: ‏C-f נוע תו אחד קדימה ‏C-b נוע תו אחד אחורה ‏M-f נוע מילה קדימה ‏M-b נוע מילה אחורה ‏C-n נוע לשורה הבאה ‏C-p נוע לשורה הקודמת ‏C-a נוע לתחילת השורה ‏C-e נוע לסוף השורה ‏M-a נוע קדימה לסוף המשפט ‏M-e נוע אחורה לתחילת המשפט >> נסו את כל הפקודות הללו מספר פעמים, לשם תרגול. אלו הן הפקודות הנפוצות ביותר. שתי פקודות תנועה חשובות אחרת הן ‪M-<‬ ‏(META פחות), אשר נעה לתחילת הטקסט, ו־‪M->‬ ‏(META יותר), אשר נעה לסוף הטקסט. ברוב המקלדות המקש ">" נמצא מעל הפסיק, לכן כדי להקישו יש צורך ללחוץ ולהחזיק מקש Shift. באופן דומה יש ללחוץ על Shift כדי להקיש ‪M-<‬ כי אחרת היה יוצא M-פסיק. >> נסו עתה ‪M-<‬ כדי להגיע לתחילת השיעור. אחר־כך הקישו C-v מספר פעמים, עד שתגיעו לכאן. >> עכשיו נסו ‪M->‬ כדי להגיע לסוף השיעור. לאחר מכן הקישו M-v כמה פעמים כדי לחזור לכאן. ניתן להזיז את הסמן גם בעזרת מקשי החצים, אם הם קיימים במקלדת שלכם. אבל אנחנו ממליצים ללמוד להשתמש ב־C-b, C-f, C-n ו־C-p משלוש סיבות. קודם כל, הם יעבדו עם כל מקלדת. שנית, כשתתרגלו לעבוד עם Emacs, תראו כי השימוש במקשים אלו מהיר יותר מהשימוש בחצים (מכיון שאין צורך להזיז את היד מהחלק העיקרי של המקלדת). ושלישית, כשהמקשים הללו יהפכו להרגל, יהיה לכם קל יותר ללמוד פקודות מתקדמות יותר של תנועת הסמן. רוב הפקודות של Emacs מקבלות ארגומנט נומרי; עבור רוב הפקודות הארגומנט משמש כמונה של מספר החזרות על הפקודה. כדי לספק ארגומנט לפקודה, יש להקיש C-u ואחר־כך ספרות, וזאת לפני שמקישים את הפקודה עצמה. עם במקלדת קיים מקש META (או ALT), יש גם אפשרות אחרת לציין ארגומנט נומרי: הקישו את הספרות תוך כדי החזקת מקש META. אנו ממליצים על C-u משום שהוא יעבוד עם כל מקלדת. הארגומנט הנומרי נקרא גם "ארגומנט קידומת" (prefix argument) משום מקישים אותו לפני הפקודה אליה הוא מתייחס. למשל, C-u 8 C-f מניע את הסמן 8 תוים קדימה. >> נסו להקיש C-n או C-p עם ארגומנט נומרי, כדי להזיז את הסמן אל שורה מסוימת בפקודה אחת בלבד. רוב הפקודות מפרשות את הארגומנט הנומרי כמונה חזרות, אבל פקודות מסוימות משתמשות בו בצורות אחרות. כמה פקודות (אבל אף אחת מבין אלו שלמדנו עד כה) משתמשות בו כדגלון -- נוכחותו של הארגומנט, ללא קשר לערכו המספרי, גורמת לפקודה להתנהג קצת אחרת. ‏C-v ו־M-v יוצאים מהכלל הזה באופן אחר. כשפקודות אלו מקבלות ארגומנט, הן גוללים את התצוגה כמספר הזה של שורות, ולא בדפים. למשל, C-u 8 C-v יגלול את התצוגה ב־8 שורות. >> נסו עתה להקיש C-u 8 C-v. כתוצאה, התצוגה היתה צריכה לזוז ב־8 שורות. אם ברצונכם לגלול בחזרה, אפשר להשיג זאת ע״י מתן ארגומנט ל־M-v. אם הפעלתם את Emacs על־גבי תצוגה גרפית כגון X או MS-Windows, אתם צריכים לראות פס צר וגבוה, ששמו פס גלילה (scroll bar) בצידו של החלון של Emacs. ניתן לגלול את הטקסט ע״י הקלקת עכבר בתוך פס הגלילה. אם העכבר שלכם מצויד בגלגל, תוכלו להשתמש גם בו לגלילת הטקסט. * אם Emacs מפסיק להגיב ---------------------- אם Emacs מפסיק להגיב לפקודות, תוכלו להפסיק אותו בבטחה ע״י הקשת C-g. פקודות שביצוען מתארך אף הן ניתנות להפסקה בעזרת C-g. בנוסף, תגרום הקשת C-g לביטול הארגומנט הנומרי או תחילת הפקודה שטרם השלמתם להקיש והתחרטתם. >> הקישו C-u 100 כדי לציין ארגומנט של 100, ולאחר מכן C-g. עתה הקישו C-f. הוא צריך לנוע תו אחד בלבד, שכן ביטלתם את הארגומנט בעזרת C-g. אם הקשתם בטעות, ניתן לבטלו בעזרת C-g. * פקודות מנוטרלות ----------------- מספר פקודות ב־Emacs מנוטרלות בכוונה כדי שמשתמשים מתחילים לא יפעילו אותן בדרך מקרה. אם תקישו את אחת הפקודות הללו, Emacs יציג הודעה המתארת את הפקודה וישאל אם לבצע את הפקודה או לבטלה. אם אכן בכוונתכם לנסות את הפקודה, הקישו (מקש הרווח) בתשובה לשאלה. בדרך כלל, אם אינכם מעוניינים לבצע את הפקודה המנוטרלת, הקישו "n" בתשובה לשאלה הזו. * חלונות -------- תצוגת Emacs יכולה לכלול יותר מחלון אחד, כשכל אחד מהם מציג טקסט משלו. מאוחר יותר נסביר כיצד להשתמש בחלונות מרובים. כעת ברצוננו להסביר כיצד להפטר מחלונות מנותרים ולחזור לעריכה בחלון יחיד. אין דבר פשוט מזה: ‏C-x 1 חלון אחד בלבד (כלומר, סגור את כל החלונות האחרים). כדי להפעיל פקודה זו, הקישו CONTROL-x ולאחריו את הספרה 1. הפקודה C-x 1 מרחיבה את החלון המציג את הסמן כך שהוא תופס את כל שטח התצוגה. הפקודה מבטלת את שאר החלונות. >> הניעו את הסמן לתוך שורה זו והקישו C-u 0 C-l. >> עתה הקישו C-h k C-f. שימו לב כיצד החלון הנוכחי מצטמצם ומופיע חלון חדש שבו מוצג התיעוד של הפקודה C-f. >> הקישו C-x 1 ושימו לב שהחלון עם ההסבר על C-f נעלם. פקודה זו שונה מכל שאר הפקודות שלמדנו עד כה בכך שהיא מכילה שני תוים. היא מתחילה עם התו CONTROL-x. פקודות רבות מאד מתחילות ב־CONTROL-x; חלק גדול מהן עוסקות בחלונות, קבצים, חוצצים ונושאים דומים אחרים. פקודות אלו מכילות שנים, שלושה ואפילו ארבעה תוים. * הכנסה ומחיקה -------------- אם ברצונכם להכניס טקסט, פשוט הקישו על המקשים המתאימים. תוים רגילים, כגון A, א, 7, * וכד' מיד מתווספים לטקסט הקיים. הקישו (מקש חזרת גרר שלעתים נהוג לקרוא לו "Enter") כדי להכניס את תו השורה החדשה (Newline). למחיקת התו האחרון שהקשתם הקישו . בדרך כלל זהו מקש שמסומן ב־"Backspace", והוא משמש אתכם למחיקת התו אחרון גם בתוכניות אחרות, לא רק ב־Emacs. יתכן שבמקלדת שלכם קיים מקש שעליו רשום , אך זה אינו המקש שאנו קוראים לו . >> הקישו עתה מספר תוים, ואחר־כך מחקו אותם ע״י הקשות אחדות על . אל תחששו לשנות את הקובץ הזה -- העותק המקורי של השיעור יישאר ללא שינוי. אתם עובדים על העותק האישי שלכם. כאשר שורה של טקסט נעשית ארוכה משורה אחת של תצוגה, חלק מהטקסט ממשיך בשורת תצוגה נוספת, היא "שורת ההמשך". על תצוגה גרפית יופיע חץ עקלקל קטן באזור השוליים -- "fringe" שמסמל כי לשורה יש שורת המשך, ואילו על תצוגה טקסטואלית יופיע תו לוכסן ('/' או '\', תלוי אם הוא בצד שמאל או בצד ימין) לאותה תכלית, בסוף השורה. >> הקישו טקסט עד שתגיעו לקצה השורה, ואז תמשיכו להקיש עוד טקסט. כתוצאה, תראו שמופיעה שורת המשך. >> עתה הקישו על־מנת למחוק טקסט עד שהשורה תיעשה קצרה מספיק ותתאים לשורה בודדת על־גבי התצוגה. שורת ההמשך תיעלם. ניתן למחוק את תו ה־Newline כמו כל תו אחר. מחיקת ה־Newline בין שתי שורות תמזג את השורות לשורה אחת. אם השורה המשולבת תהיה ארוכה מרוחב התצוגה, היא תוצג עם שורת המשך. >> הניעו את הסמן לתחילת השורה והקישו . כתוצאה, השורה תתמזג אם קודמתה. >> עתה הקישו כדי להחזיר את ה־Newline שמחקתם. מקש הוא מיוחד בכך שהקשה עליו עשויה לגרום יותר מהכנסת תו ה־Newline. בתלות בטקסט מסביב יתכן כי Emacs יכניס תווי רווח או TAB אחרי תו ה־Newline, וזאת כדי ליישר את תחילת השורה החדשה עם הטקסט בשורה הקודמת. התנהגות זו, שבה הקשה על מקש גורמת לתוצאות מעבר להכנסה פשוטה של התו המתאים, נקראת "חשמלית" ("electric"). זכרו כי לרוב הפקודות ב־Emacs אפשר לציין מספר חזרות. גם תוי טקסט שייכים לקבוצת פקודות זו. חזרה על תו טקסט מכניסה אותו מספר פעמים. >> נסו זאת עכשיו -- הקישו ‪C-u 8 *‬ על־מנת להכניס ********. ובכן, למדתם את האופן הבסיסי ביותר להדפיס משהו ב־Emacs ולתקן שגיאות. אפשר למחוק גם מלים ואף שורות שלמות. להלן סיכום פקודות המחיקה: ‏ מחק תו שלפני הסמן ‏C-d מחק תו מתחת או אחרי הסמן ‏‪M-‬ גזור מילה שלפני הסמן ‏M-d גזור מילה שאחרי הסמן ‏C-k גזור טקסט מהסמן ועד סוף השורה ‏M-k גזור טקסט עד סוף המשפט הנוכחי. שימו לב שהיחס בין ו־C-d לעומת M-‎ ו־M-d ממשיכים את ההקבלה שבין C-f ו־M-f (אמנם איננו תו בקרה, אבל בוא נזניח את הנקודה הזו לעת־עתה). C-k ו־M-k דומים ל־C-e ו־M-e, אם נקביל שורות למשפטים. בנוסף, קיימת שיטה אחידה שמאפשרת לגזור קטע כלשהו של טקסט. לשם כך, תגיעו לקצה האחד של חלק הטקסט והקישו C-‎. ( הוא מקש הרווח.) עתה הניעו את הסמן לקצה השני של חלק הטקסט אשר ברצונכם לגזור. תוך כדי תנועת הסמן Emacs צובע את הטקסט בין הסמן לבין המקום בו הקשתם C-‎. לבסוף, הקישו C-w. כתוצאה, כל הטקסט בין שני המקומות הללו ייגזר. >> הניעו את הסמן אל האות ב בתחילת הפיסקה הקודמת. >> הקישו C-‎. ‏Emacs צריך להציג הודעה האומרת "Mark set" בתחתית התצוגה. >> הניעו את הסמן אל האות צ בשורה השניה של הפיסקה. >> הקישו C-w. בכך תגזרו את חלק הטקסט שמתחיל ב־ב ומסתיים לפני ה־צ. ההבדל בין "מחיקה" ("deletion") ו־"גזירה" ("killing") הוא שהטקסט "הגזור" ניתן לאחזור ולהכנסה (במקום כלשהוא בטקסט), ואילו טקסט "מחוק" לא ניתן להכניס מחדש בשיטה זו. (אבל ניתן לבטל את מחיקה -- ראה להלן.) אחזור הטקסט הגזור נקרא "הדבקה" ("yanking"). באופן כללי, פקודות אשר עלולות להעלים כמויות גדולות של טקסט תמיד גוזרות את הטקסט (כך שניתן יהיה בקלות לשחזרו) בעוד הפקודות שמורידות תו בודד או שורות ריקות ותוי רווח -- מוחקות (כך שלא ניתן להדביק את הטקסט שנמחק). כך, ו־C-d מוחקים כאשר מפעילים אותם ללא ארגומנט, אבל גוזרים כאשר מפעילים אותם עם ארגומנט. >> הניעו את הסמן לתחילת שורה שאינה ריקה. אחר־כך הקישו C-k כדי לגזור את כל הטקסט של אותה שורה. >> הקישו C-k פעם נוספת. שימו לב שהוא גוזר את ה־Newline שבסוף השורה. שימו לב ש־C-k בודד גוזר את תכולת השורה, ו־C-k נוסף גוזר גם את השורה עצמה וגורם לשאר השורות לנוע כלפי מעלה. C-k מפרש את הארגומנט הנומרי באופן מיוחד: הוא גוזר כמספר הזה שורות, כולל ה־Newlines שלהן. זה שונה מסתם הפעלה חוזרת: C-u 2 C-k גוזר שתי שורות כולל ה־Newlines שלהן, ואילו הקשה על C-k פעמיים לא עושה כן. אחזור הטקסט שגזרנו נקרא "הדבקה" ("yanking"). (תחשבו על זה כעל שליפה של טקסט מתהום הנשייה אליה הוא נלקח.) ניתן להדביק את הטקסט שגזרתם באותו מקום ממנו נגזר או במקום אחר כלשהו בתוך הטקסט שאתם עורכים, או אפילו בקובץ אחר. ניתן להדביק את אותו הטקסט מספר פעמים ובכך ליצור עותקים מרובים ממנו. תוכניות עריכה אחרות משתמשות במונחים "cutting" ו־"pasting" במקום "killing" ו־"yanking" (ראה את מילון המונחים בפרק ה־"Glossary" של מדריך למשתמשי Emacs). הפקודה להדבקה היא C-y. היא מכניסה את הטקסט הגזור במקום הנוכחי של הסמן. >> נסו זאת: הקישו C-y כדי לאחזר טקסט שגזרתם קודם לכן. אם תקישו C-k מספר פעמים ברצף, כל הטקסט שגזרתם בדרך זו נשמר ביחד, כך ש־C-y בודד ידביק את כולו בבת אחת. >> עשו זאת עתה: הקישו C-k כמה פעמים. עכשיו לאחזור הטקסט שגזרתם: >> הקישו C-y. אחר־כך הניעו את הסמן כמה שורות כלפי מטה והקישו C-y שוב. כפי שראיתם, כך תוכלו להעתיק חלק מהטקסט ממקום למקום. מה לעשות אם יש לכם טקסט להדבקה, אבל בינתיים גזרתם טקסט אחר? C-y ידביק רק את הגזירה האחרונה. אולם הטקסט שגזרתם קודם לכן אינו הלך לאיבוד. ניתן לאחזרו בעזרת הפקודה M-y. אחרי שהקשתם C-y שמדביק את הטקסט שגזרתם לאחרונה, הקשה על M-y מחליפה את הטקסט המודבק בטקסט שגזרתם בפעם לפני האחרונה. הקשה חוזרת ונשנית על M-y מביאה טקסט שגזרתם בפעמים קודמות יותר ויותר. כשתראו שהטקסט המודבק הוא מה שרציתם להדביק, תפסיקו להקיש M-y ותמשיכו בעריכה כרגיל. אין צורך בשום פקודה מיוחדת לשם כך. אם תקישו M-y מספיק פעמים בזו אחר זו, תגיעו חזרה לנקודת ההתחלה (טקסט שגזרתם לאחרונה). >> גזרו שורה, אחר־כך תניעו את הסמן אנה ואנה, ולבסוף גזרו שורה נוספת. הקישו C-y כדי לאחזר את השורה השניה שגזרתם. עתה הקישו M-y והשורה שאחזרתם תוחלף בשורה הראשונה שגזרתם. הקישו M-y מספר פעמים נוספות ושימו לב לתוצאות. המשיכו להקיש M-y עד שהשורה השניה שגזרתם תופיע שוב, ואז תמשיכו עוד מספר פעמים. אם תרצו, תוכלו לנסות M-y עם ארגומנט חיובי או שלילי. * ביטול פעולות -------------- אם שיניתם את הטקסט ואז החלטתם שהשינוי היה טעות, תוכלו לבטל את השינוי בעזרת פקודת הביטול, ‪C-/‬. בדרך כלל,‪C-/‬ מבטל את השינויים שבוצעו ע״י פקודה אחת. הפעלה חוזרת של ‪C-/‬ ברצף מבטלת שינויים של פקודות קודמות, אחת אחרי השניה. שני יוצאים מהכלל הזה: פקודות שאינן משנות טקסט (למשל פקודות הנעת הסמן ופקודות גלילה) אינן נספרות ותוים שמכניסים את עצמם מקובצים בקבוצות של עד 20, כדי להקטין את מספר הפעמים שיש להקיש ‪C-/‬ כדי לבטל הכנסת טקסט. >> גזרו שורה זו עם C-k, אחר־כך הקישו ‪C-/‬ והיא תופיע שוב. ‏C-_‎ הינה דרך חלופית להפעיל את פקודת הביטול. היא פועלת בדיוק כמו ‪C-/‬. במקלדות אחדות אפשר לא ללחוץ על shift כשמקישים ‏C-_‎. במקלדות אחדות הקשה על ‪C-/‬ שולחת ל־Emacs את התו C-_‎. חלופה נוספת היא C-x u, אם־כי היא פחות נוחה להקשה מספר פעמים בזו אחר זו. ארגומנט נומרי ל־‪C-/‬ או ל־C-_‎ או ל־C-x u משמש כמספר החזרות על הפקודה. ניתן לבטל מחיקה של טקסט בדיוק כמו שניתן לבטל גזירה. ההבדלים בין מחיקה וגזירה משפיעים על יכולתכם להדביק את הטקסט הגזור עם C-y; הם אינם חשובים לעניין הביטול. * קבצים ------- על־מנת שהטקסט שערכתם יישמר, יש לשים אותו בקובץ. אחרת, הוא ייעלם ברגע שתצאו מ־Emacs. כדי לשים את הטקס בקובץ, יש "לפתוח" ("find") את הקובץ לפני שמתחילים להקיש טקסט. (שם אחר לכך הוא "לפקוד" את הקובץ - "visit".) פתיחת הקובץ משמעותה שתוכן הקובץ מוצג בתוך Emacs. מבחינות רבות הדבר דומה לעריכת הקובץ עצמו. אולם, השוניים שלכם בתוך Emacs אינם הופכים חלק מהקובץ עד שאתם "שומרים" את הקובץ. זאת, כדי להימנע מיצירת קובץ שאינו שלם במערכת שלא כרצונכם. אפילו אם אתם שומרים את הקובץ, Emacs משאיר את התוכן המקורי בשם שונה למקרה שמאוחר יותר תחליטו שהשינויים נעשו בטעות. אם תביטו בחלק התחתון של התצוגה, תראו שם שורה בולטת שמתחילה במקפים וליד הקצה השמאלי שלה כתוב "TUTORIAL.he". חלק זה של התצוגה בדרך כלל מציג את שם הקובץ אותו אתם פוקדים. כרגע אתם פוקדים קובץ בשם "TUTORIAL.he" שהוא עותק הטיוטה האישי שלכם של שיעור השימוש ב־Emacs. פתיחת קובץ כלשהו ב־Emacs תציג את שמו של הקובץ במקום זה. היבט אחד מיוחד של פתיחת קובץ הוא שיש לציין את שם הקובץ אשר ברצונכם לפתוח. אנו אומרים שהפקודה "קוראת ארגומנט" (במקרה זה הארגומנט הוא שם הקובץ). אחרי שתקישו את הפקודה ‏C-x C-f פתח קובץ ‏Emacs מבקש שתקישו את שם הקובץ. שם הקובץ שתקישו מופיע בשורה התחתונה של התצוגה. שורה זו נקראת "מיני־חוצץ" ("minibuffer") כשהיא משמשת לסוג זה של קלט. ניתן להשתמש בכל פקודות העריכה הרגילות של Emacs כשמקישים את שם הקובץ בחוצץ זה. אם טרם סיימתם להקיש את שם הקובץ (או כל סוג אחר של קלט במיני־חוצץ), ניתן לבטל את הפקודה בעזרת C-g. >> הקישו C-x C-f ואחר־כך הקישו C-g. זה מבטל את המיני־חוצץ וגם מבטל את הפקודה C-x C-f שהשתמשה במיני־חוצץ. התוצאה היא שאף קובץ לא נפתח. משסיימתם להקיש את שם הקובץ, הקישו לסיים את הקלט. או־אז המיני־חוצץ נעלם והפקודה C-x C-f תיגש לעבודה ותמצא ותפתח את הקובץ שבחרתם. כאשר פקודת ה־C-x C-f תסיים את עבודתה, תוכן הקובץ יופיע על־גבי התצוגה ותוכלו לבצע בו שינויים. כשתחליטו לשמור את השינויים, הקישו את הפקודה הבאה: ‏C-x C-s שמור את הקובץ פקודה זו שומרת בקובץ את הטקסט המוחזק בתוך Emacs. בפעם הראשונה שתפעילו פקודה זו, Emacs משנה את שם הקובץ המקורי לשם חדש כך שהמקור לא ילך לאיבוד. השם החדש נוצר ע״י הוספת "~" בסוף השם המקורי של הקובץ. כשהשמירה מסתיימת, Emacs מציג בשורה התחתונה את שם הקובץ שנשמר. נסו לשמור לעתים מזומנות על־מנת להימנע מלאבד יותר מדי מהעבודה שלכם אם המחשב ייפול (ראה להלן פיסקה על שמירה אוטומטית). >> הקישו C-x C-s TUTORIAL.he ותסיימו בהקשת . כתוצאה, שיעור זה יישמר בקובץ בשם TUTORIAL.he ובתחתית התצוגה תופיע ההודעה "Wrote ...TUTORIAL.he". ניתן לפתוח קובץ קיים על־מנת לצפות בו או לערוך אותו. ניתן גם לפתוח קובץ שאינו קיים. זו הדרך ליצור קבצים חדשים בעזרת Emacs: פתחו את הקובץ שיהיה תחילה ריק ואז התחילו להקיש טקסט לתוכו. כשתפעילו את פקודת השמירה, Emacs ייצור את הקובץ עם הטקסט שהקשתם. מאותו רגע ואילך, תוכלו לחשוב שהינכם עורכים קובץ קיים. * חוצצים -------- אם תפתחו קובץ נוסף עם C-x C-f, הקובץ הראשון עדיין נשאר פתוח ב־Emacs. תוכלו לחזור אליו ע״י C-x C-f. כך תוכלו לפתוח מספר רב של קבצים. ‏Emacs מחזיק כל קובץ בתוך יישות בשם "חוצץ" ("buffer"). פתיחת קובץ יוצרת חוצץ חדש בתוך Emacs. כדי לראות את רשימת החוצצים הקיימים בתוך Emacs, הקישו ‏C-x C-b הצג רשימת כל החוצצים >> נסו את C-x C-b בנקודה זו. שימו לב שלכל חוצץ יש שם וכל חוצץ עשוי גם לציין את שם הקובץ שאת תוכנו הוא מחזיק. כל טקסט שאתם מקישים בחלון Emacs תמיד יהיה חלק של חוצץ כלשהו. >> הקישו C-x 1 כדי להפטר מרשימת החוצצים. כשקיימים מספר חוצצים, רק אחד מהם יכול להיות החוצץ "הנוכחי" בכל רגע נתון. זהו החוצץ בו אתם מבצעים עריכה באותו רגע. אם ברצונכם לערוך חוצץ אחר, עליכם "לעבור" חוצץ. עבור חוצצים שמתאימים לקבצים, ניתן לעשות זאת ע״י C-x C-f שיפקוד את הקובץ בשנית. אבל קיימת דרך פשוטה יותר: שימוש בפקודה C-x b. פקודה זו תחייב אותכם להקיש את שם החוצץ. >> ניצור עתה קובץ בשם "foo" ע״י הקשת C-x C-f foo ‎. עתה חזרו לשיעור זה בעזרת C-x b TUTORIAL.he ‎. ברוב המקרים שם החוצץ זהה לשם הקובץ (ללא שם התיקיה שלו). אבל אין זה תמיד כך. רשימת החוצצים שנוצרת ע״י C-x C-b תציג הן את שם החוצץ והן את שם הקובץ עבור כל החוצצים הקיימים ב־Emacs. כל טקסט שמוצג בחלון של Emacs הינו תמיד חלק של חוצץ כלשהו. קיימים חוצצים שאינם קשורים לשום קובץ. לדוגמא, החוצץ בשם "*Buffer List*" המחזיק את רשימת החוצצים שנוצרה ע״י C-x C-b אינו מציג שום קובץ. גם לחוצץ הנוכחי ששמו TUTORIAL.he לא היה קובץ עד שהקשתם על C-x C-s כדי לשמור אותו בקובץ. חוצץ בשם "*Messages*" אף הוא אינו קשור לשום קובץ; הוא מחזיק את ההודעות שהופיעו בשורה התחתונה במהלך עבודתכם בתוך Emacs. >> הקישו C-x b *Messages* ‎ כדי לצפות בחוצץ של הודעות. אחר־כך הקישו C-x b TUTORIAL.he ‎ על־מנת לחזור לשיעור זה. אם עשיתם שינויים בטקסט של קובץ ואחר־כך פתחתם קובץ אחר, אין הדבר שומר את השינויים שעשיתם לקובץ הראשון. השינויים הללו נשארים בתוך Emacs, בתוך החוצץ של אותו קובץ. יצירתו ועריכתו של הקובץ הנוסף אינם משפיעים על החוצץ של הקובץ הראשון. דבר זה הוא שימושי, אך משמעותו היא שיש צורך בשיטה נוחה לשמור את החוצץ של הקובץ הראשון. היה זה מאד לא נוח אילו לשם כך הייתם צריכים לעבור לחוצץ ההוא בעזרת C-x C-f ואז לשמור עם C-x C-s. לכן קיימת פקודה ‏C-x s שמור חוצצים אחדים ‏C-x s עובר על כל החוצצים אשר מכילים שינויים שטרם נשמרו. לגבי כל חוצץ כזה הוא שואל אתכם האם לשמור אותו או לא. >> הכניסו שורה של טקסט ואחר־כך הקישו C-x s. הוא צריך לשאול האם לשמור חוצץ בשם TUTORIAL.he. השיבו בחיוב ע״י הקשה על "y". * הרחבת אוסף הפקודות -------------------- מספר הפקודות ב־Emacs גדול בהרבה ממה שניתן להפעיל ע״י כל תוי ה־control וה־meta. כדי להתגבר על בעיה זו, Emacs משתמש בפקודות X המרחיבות (eXtend) את אוסף הפקודות הרגיל. פקודות הרחבה אלו הן שתים: ‏C-x הרחבת תו. תו בודד שבא אחריו משלים את הפקודה. ‏M-x הרחבה ע״י שם הפקודה. אחריו בא שם ארוך של פקודה. בעזרת שתי אלו ניתן להפעיל פקודות שימושיות שבהן משתמשים לעתים רחוקות יותר מאשר פקודות שלמדתם עד עכשיו. כמה מהן כבר ראיתם: C-x C-f לפתיחת קובץ, ו־C-x C-s לשמירת קובץ, לדוגמא. דוגמא נוספת היא פקודה לצאת מ־Emacs -- ‏C-x C-c. (כשאתם מפעילים C-x C-c, אל תדאגו לשינויים שטרם נשמרו; C-x C-c מציע לשמור כל קובץ ששיניתם לפני שהוא מסיים את Emacs.) אם אתם משתמשים בצג גרפי, אינכם זקוקים לפקודה מיוחדת כדי לעבור מ־Emacs לתוכנית אחרת. אפשר לעשות זאת בעזרת העכבר או פקודות של מנהל החלונות. אולם, כאשר אתם משתמשים בתצוגה טקסטואלית שמסוגלת להציג רק תוכנית אחת בו־זמנית, תצטרכו "להשעות" ("suspend") את Emacs על־מנת לעבור לתוכנית אחרת. הפקודה C-z יוצאת מ־Emacs *באופן זמני* -- כך שתוכלו לשוב אליו מאוחר יותר ולהמשיך מאותה נקודה. כאשר Emacs רץ על תצוגת טקסט, C-z "משעה" את Emacs: הוא מחזיר אתכם לשורת הפקודות הבסיסית של מערכת ההפעלה ("shell"), אבל אינו מסיים את Emacs. ברוב המערכות, כדי להמשיך בעבודתכם ב־Emacs, תצטרכו להקיש את הפקודה "fg" או ‪"%emacs"‬. הרגע הנכון להשתמש ב־C-x C-c הוא כאשר אתם עומדים להתנתק (log out). כמו־כן, תצטרכו להשתמש בו כדי לצאת מ־Emacs שהופעל ע״י תוכניות אחרות כגון קריאת דואר אלקטרוני. קיימות פקודות C-x רבות מאד. להלן רשימת אלו שכבר למדתם: ‏C-x C-f פתח קובץ ‏C-x C-s שמור קובץ ‏C-x s שמור חוצצים אחדים ‏C-x C-b הצג רשימת חוצצים ‏C-x b החלף חוצץ ‏C-x C-c צא מ־Emacs ‏C-x 1 השאר רק חלון אחד ומחק כל השאר ‏C-x u בטל פקודה אחרונה הרחבה ע״י שם הפקודה שימושית עם פקודות עוד יותר נדירות או פקודות ספציפיות רק לאופני פעולה (modes) מיוחדים. דוגמא לכך היא פקודה replace-string (החלף מחרוזת) אשר מחליפה מחרוזת אחת במשנה בכל החוצץ. אחרי שתקישו M-x, ‏Emacs מציג M-x בתחתית התצוגה ומחכה שתקישו את שם הפקודה, במקרה זה "replace-string". מספיק שתקישו "repl s‎" ו־Emacs ישלים את השם המלא. ( הוא מקש Tab, בדרך כלל תמצאו אותו מעל מקש ה־Caps Lock או Shift, ליד הקצה השמאלי של המקלדת.) סיימו את הזנת הפקודה ע״י הקשת . הפקודה להחלפת מחרוזת זקוקה לשני ארגומנטים -- המחרוזת שתוחלף וזו שתחליף אותה. סיימו הקשה של כל אחת מהן ע״י . >> הביאו את הסמן שתי שורות מתחת לשורה זו. עתה הקישו M-x repl schangedaltered‎. שימו לב שהמילה "changed" בשורה זו שתנתה: זה עתה החלפתם את המילה c-h-a-n-g-e-d במילה "altered" בכל מקום בו היא נמצאת אחרי הסמן. * שמירה אוטומטית ---------------- שינויים שערכתם בקובץ אבל טרם שמרתם עלולים ללכת לאיבוד אם המחשב שלכם נתקע. על־מנת להגן עליכם מפני סכנה זו, Emacs שומר לעתים מזומנות כל קובץ שנמצא בעריכה. השמירה האוטומטית הזאת נעשית לקובץ נפרד ששמו מתחיל ומסתיים בתו #. לדוגמא, אם הינכם עורכים קובץ בשם "hello.c", קובץ השמירה האוטומטית שיווצר עבורו ייקרא "#hello.c#". שמירה רגילה של הקובץ על ידכם מוחקת את קובץ השמירה האוטומטית. אם המחשב אכן נתקע, תוכלו לנציל את השינויים שלא הספקתם לשמור. לשם כך, יש לפתוח את הקובץ כרגיל (את הקובץ בשמו המקורי, לא את קובץ השמירה האוטומטית), ואחר־כך להקיש M-x recover-this-file ‎. כש־Emacs יבקש אישור, הקישו yes‎ כדי ש־Emacs ישחזר את הקובץ כפי שנשמר אוטומטית. * תצוגת הד ---------- אם Emacs מגלה שאתם מקישים פקודה לאט, הוא מציג את שהקשתם בתחתית התצוגה, באזור שנקרא "אזור תצוגת הד". אזור זה משתמש בשורה התחתונה של התצוגה. * שורת סטטוס ------------ השורה שמעל אזור תצוגת הד נקראת "שורת הסטטוס" (mode line). שורה זו מציגה משהו כמו: U:**- TUTORIAL.he 63% L651 (Fundamental) שורה זו מציגה מידע חשוב לגבי מצבו של Emacs ולגבי הטקסט שנמצא בעריכה. אתם כבר יודעים מהי משמעותו של שם הקובץ -- זהו הקובץ שפתחתם. NN%‎ מציין את מיקומכם הנוכחי בתוך הטקסט, לאמור כי NN אחוזים מתכולת החוצץ קודמים לטקסט המוצג כרגע בחלון. אם המוצג בחלון כולל את תחילת הטקסט, תראו שם "Top" במקום "0% ". אם המוצג בחלון כולל את סוף הטקסט, תראו שם "Bot" ‏(bottom). אם הטקסט כל־כך קצר שכולו מוצג בחלון, שורת הסטטוס תציג "All". האות L והמספר שאחריה מציינים את המיקום הנוכחי בדרך אחרת: הם מראים את מספר השורה שבה נמצא הסמן. הכוכביות ליד הקצה השמאלי משמעותן כי שיניתם את הטקסט. מיד אחרי פתיחת הקובץ או אחרי שמירתו החלק הזה של שורת הסטטוס אינו מציג כוכביות, אלא רק מקפים. החלק שבתוך הסוגריים אומר לכם מהo אופני העריכה (editing modes) הפעילים כעת. ברירת המחדל היא Fundamental, האופן הבסיס, שבו אתם משתמשים כעת. זוהי דוגמא של "אופן עריכה ראשי" (major mode). ל־Emacs אופני עריכה ראשיים רבים ומגוונים. חלק מהם נועדו לעריכה של שפת תכנות מסוימת ו/או סוג מסוים של טקסט, כגון Lisp mode, Text mode וכד'. בכל רגע נתון רק אופן עיקרי אחד יכול להיות פעיל ושמו תמיד מצויין בשורת הסטטוס באותו מקום בו כרגע אתם רואים "Fundamental". כל אופן עיקרי גורם לכמה פקודות לפעול בצורה מיוחדת. למשל, ישנן פקודות ליצירת הערות בתוך תוכנית, והיות וכל שפת תכנות מגדירה את הפורמט של הערות בצורה אחרת, כל אופן עיקרי חייב להכניס הערות בצורה שמתאימה לשפה. כל אופן עיקרי הינו למעשה שם הפקודה שבעזרתה אפשר להפעיל את אותו האופן. למשל הפקודה להפעיל את האופן Fundamental הינה M-x fundamental-mode. אם בכוונתכם לערוך טקסט בשפה אנושית כלשהי, כמו הקובץ הזה, כדאי לכם להשתמש ב־Text mode. >> הקישו M-x text-mode ‎. אל דאגה: אף אחת מפקודות Emacs שלמדתם עד כה משנה את התנהגותה באופן מהותי. עם זאת, שימו לב ש־M-f ו־M-b מתייחסים עכשיו ל־'גרש' כחלק מהמילה. לפני־כן, ב־Fundamental mode, ‏M-f ו־M-b התנהגו עם הגרש כמפריד בין מילים. אופנים ראשיים בדרך־כלל משנים קלות את התנהגות הפקודות: רוב הפקודות עדיין "עושות אותה עבודה" בכל האופנים הראשיים, אבל עושות אותה קצת אחרת. לצפיה בתיעוד של האופן הראשי הנוכחי יש להקיש C-h m. >> הקישו C-l C-l כדי להביא שורה זו לראשית התצוגה. >> עתה הקישו C-h m כדי לראות במה Text mode שונה מה־Fundamental mode. >> לבסוף, הקישו C-x 1 כדי לסלק את התיעוד מהתצוגה. אופנים ראשיים נקראים כך משום שקיימים גם אופני־משנה (minor modes). אופני משנה אינם מהווים חלופה לאופנים הראשיים, הם רק משנים אותם במקצת. כל אופן־משנה ניתן להפעלה או ביטול ללא תלות בכל שאר אופני המשנה וללא תלות באופן הראשי הנוכחי. לכן תוכלו להפעיל אופן־משנה אחד או יותר, או אף אופן־משנה. אחד מאופני־המשנה השימושיים ביותר, במיוחד לשם עריכת טקס בשפת־אנוש, הוא Auto Fill mode. כאשר אופן זה מופעל, Emacs אוטומטית פותח שורה חדשה בסיום מילה אם הטקסט שהקשתם ארוך מדי בשביל שורה אחת. להפעלת Auto Fill mode יש להקיש M-x auto-fill-mode ‎. כאשר אופן זה מופעל, ניתן לבטלו ע״י M-x auto-fill-mode ‎. זאת אומרת, פקודה זו מפעילה את האופן כשאינו פעיל ומבטלת אותו כשהוא פעיל. לפעולה זו קוראים "מיתוג" -- הפקודה "ממתגת" את האופן. >> הקישו עתה M-x auto-fill-mode ‎. אחר־כך הקישו "שדגכ " (עם הרווח בסוף) שוב ושוב עד שתיפתח שורה חדשה. הרווחים חשובים משום ש־Auto Fill mode שובר שורות אך ורק ברווח שבין המלים. השוליים (margin) ש־Emacs שומר בדרך־כלל מתחילים אחרי 70 תווים, אבל ניתן לשנות הגדרה זו בעזרת הפקודה C-x f. פקודה זו מקבלת את ההגדרה החדשה של השוליים כארגומנט נומרי. >> הקישו C-x f עם ארגומנט של 20. (C-u 2 0 C-x f). אחר־כך הקישו טקסט כלשהו ושימו לב ש־Emacs פותח שורות חדשות אחרי 20 תווים לכל היותר. לבסוף, החזירו את הגדרת השוליים ל־70 ע״י שימוש חוזר ב־C-x f. אם ערכתם שינויים באמצע פסקה, Auto Fill mode לא ימלא שורות מחדש באופן אוטומטי. כדי למלא מחדש את כל הפסקה הקישו M-q ‏(META-q) כשהסמן נמצא בתוך הפסקה. >> הניעו את הסמן לתוך הפסקה הקודמת והקישו M-q. * חיפוש ------- ‏Emacs יכול לחפש מחרוזות (רצף של תווים) קדימה או אחורה בתוך הטקסט. חיפוש של מחרוזת הוא סוג של פקודה להנעת הסמן: הוא ממקם את הסמן היכן שנמצאה המחרוזת הבאה. החיפוש של Emacs הינו "מצטבר" ("incremental"). פירוש הדבר הוא שהחיפוש מתבצע במקביל להקשתכם את המחרוזת אותה ברצונכם למצוא. הפקודה להתחיל בחיפוש היא C-s לחיפוש קדימה ו־C-r לחיפוש אחורה. חכו! אל תפעילו אותן עדיין. כשתקישו C-s, תראו שבאזור תצוגת ההד יופיע הטקסט "I-search". זה אומר ש־Emacs נמצא במצב "חיפוש מצטבר" ("incremental search") והוא ממתין להקשתכם את המחרוזת אותה ברצונכם למצוא. הקשה על מסיימת את החיפוש. >> הקישו עתה C-s כדי להתחיל בחיפוש. לאט־לאט, אות־אות, הקישו את המילה "סמן", עם הפסקה אחרי כל אות, ושימו לב להתנהגות הסמן. זה עתה מצאתם את המילה "סמן" פעם אחת. >> הקישו C-s שוב, כדי למצוא את "סמן" במקומות נוספים בטקסט. >> הקישו שלוש פעמים ושימו לב לתנועת הסמן בכל הקשה. >> הקישו לסיום החיפוש. האם שמתם לב למה שקרה? במהלך "חיפוש מצטבר" Emacs מנסה למצוא את המקום הבא בו מופיעה המחרוזת שהקשתם. כדי למצוא את המחרוזת במקום הבא, פשוט הקישו C-s פעם נוספת. אם המחרוזת אינה נמצאת בהמשך הטקסט, Emacs מצפצף ומודיע שהחיפוש נכנס למצב של "כשלון" ("failing"). הקשה על C-g גם היא מסיימת את החיפוש. אם במהלך החיפוש תקישו על , החיפוש "נסוג" למצב קודם. אם הקשתם מיד אחרי C-s, הקשת מחזירה את הסמן למקום הקודם בו נמצאה המחרוזת. אם אין מקומות קודמים בהם מופיעה המחרוזת, הקשת מוחקת את התו האחרון של המחרוזת המבוקשת. למשל, נניח שהקשתם "ס" על־מנת למצוא את המקום הבא בו מופיעה האות "ס". אם עכשיו תקישו "מ", הסמן יזוז למקום בו נמצא "סמ". עתה הקישו . ה־"מ" נמחק מהמחרוזת והסמן חוזר למקום בו הוא מצא את "ס" לראשונה. אם במהלך החיפוש תפעילו פקודה כלשהי ע״י הקשה על מקש תוך לחיצה על CONTROL או META, החיפוש יסתיים. (כמה תווים יוצאים מכלל זה -- אלו תווים מיוחדים בעת חיפוש, כדוגמת C-s ו־C-r.) הקשה על C-s מתחילה חיפוש שמנסה למצוא את המחרוזת _אחרי_ הסמן. אם ברצונכם למצוא משהו בטקסט הקודם למקום הנוכחי, הקישו C-r במקום C-s. כל מה שאמרנו לגבי C-s תקף גם לגבי C-r, אלא שכיוון החיפוש מתהפך. * חלונות מרובים --------------- אחת התכונות הנוחות של Emacs היא כי ניתן להציג יותר מחלון אחד על המסך בו־זמנית. (הערה: Emacs משתמש במונח "frame" -- "תבנית" -- בשביל מה שתוכניות אחרות מכנות "חלון". תבניות מתוארות בפסקה הבאה. תוכלו למצוא את רשימת המונחים של Emacs בפרק "Glossary" של מדריך משתמש.) >> הביאו סמן לשורה זו והקישו C-l C-l ‏(CONTROL-L ולא CONTROL-1). >> עתה הקישו C-x 2 וכתוצאה מכך החלון יתחלק לשניים. כל אחד משני החלונות מציג את השיעור הזה. הסמן נשאר בחלון העליון. >> הקישו C-M-v כדי לגלול את החלון התחתון. (אם במקלדת שלכם אין מקש META אמיתי, הקישו ‎ C-v כתחליף.) >> הקישו C-x o ‏("o" הוא רמז ל־"other", "אחר") על־מנת להעביר את הסמן לחלון התחתון. >> הקישו C-v ו־M-v בחלון התחתון כדי לגלול אותו. המשיכו לקרוא הוראות אלו בחלון העליון. >> הקישו C-x o שוב לחזור לחלון העליון. הסמן בחלון העליון יישאר במקום בו הוא היה לפני־כן. תוכלו להמשיך להשתמש ב־C-x o כדי לדלג בין החלונות. "החלון הנבחר", אותו חלון בו הנכם עורכים טקסט, מזוהה ע״י סמן בולט שמהבהב בזמן שאינכם מקלידים. לכל החלונות האחרים מיקום סמן משלהם; אם הפעלתם את Emacs על צג גרפי, מיקום הסמן בחלונות האחרים מוצג כתיבה ריקה שאינה מהבהבת. הפקודה C-M-v נוחה מאד כאשר הינכם עורכים טקסט בחלון אחד ומשתמשים בחלון אחר לייחוס. תוכלו להתקדם בחלון השני בעזרת C-M-v מבלי לעזוב את החלון הנבחר. ‏C-M-v היא דוגמא אחת של פקודת CONTROL-META. אם במקלדת שלכם קיים מקש META (או Alt) אמיתי, תוכלו להקיש את הפקודה ע״י לחיצה והחזקה של מקשי CONTROL ו־META גם יחד ואז להקיש v. הסדר שבו תלחצו על CONTROL ו־META אינו משנה כי שני המקשים הללו פועלים ע״י שינוי התו המוקש יחד איתם. אם אין במקלדת מקש META אמיתי ואתם משתמשים ב־ כתחליף, הסדר כן משנה: חייבים להקיש ורק לאחר מכן CONTROL-v, וזאת משום ש־CONTROL- v לא יעבוד. הוא תו בזכות עצמו, שלא כמו CONTROL או META. >> הקישו C-x 1 (בחלון העליון) כדי לסלק את החלון התחתון. (אילו הקשתם C-x 1 בחלון התחתון, הייתם מסלקים את החלון העליון. תוכלו לחשוב על פקודה זו כ־"השאר רק חלון אחד -- החלון בו אני נמצא עתה".) אין חובה להציג את אותו החוצץ בשני החלונות. תוכלו להשתמש ב־C-x C-f לפתיחת קובץ באחד החלונות -- דבר זה אינו משפיע על החלון השני. אפשר גם לפתוח קבצים שונים בכל אחד משני החלונות באופן בלתי־תלוי. הנה עוד שיטה להשתמש בשני חלונות להצגה של שני דברים שונים: >> הקישו C-x 4 C-f ואחר־כך הקישו שם של אחד הקבצים שלכם. סיימו עם . שימו לב שהקובץ המבוקש מוצג בחלון התחתון. הסמן מדלג לשם אף הוא. >> הקישו C-x o לעבור לחלון העליון ואחר־כך הקישו C-x 1 כדי לסלק את החלון התחתון. * תבניות מרובות --------------- ‏Emacs מסוגל לפתוח מספר "תבניות" ("frames"). תבנית כוללת קבוצת חלונות, תפריט, פסי גלילה, אזור תצוגת הד וכו'. על צג גרפי מה שאנו קוראים "תבנית" נקרא בדרך־כלל "חלון". ניתן להציג תבניות אחדות על אותו צג גרפי בו־זמנית על צג טקסטואלי אפשר להציג רק תבנית אחת בכל עת. >> הקישו C-x 5 2. כתוצאה, תבנית חדשה תופיע על המסך. כל מה שעשיתם בתבנית המקורית ניתן לעשות גם בתבנית החדשה. התבנית הראשונה אין בה שום דבר מיוחד. >> הקישו C-x 5 0. התבנית שבה הקשתם את הפקודה תיסגר ותיעלם מהמסך. כמו־כן, ניתן לסגור תבנית בדרך הרגילה הנתמכת ע״י התצוגה הגרפית של המערכת שלכם (בדרך־כלל, ע״י הקלקה על הכפתור המסומן ב־"X" בפינה עליונה של התבנית.) שום מידע אינו הולך לעיבוד כאשר סוגרים תבנית (או חלון). המידע הזה פשוט יורד מהתצוגה, אבל ניתן לאחזרו מאוחר יותר. * רמות עריכה רקורסיביות ----------------------- יתכן ותיקלעו למצב שקרוי "רמת עריכה רקורסיבית". Emacs מציין זאת ע״י סוגריים מרובעים בשורת הסטטוס מסביב לשם האופן הראשי. למשל, יוצג שם [(Fundamental)] במקום (Fundamental). כדי להחלץ מרמת עריכה רקורסיבית יש להקיש . זוהי פקודה כללית של "הימלטות". ניתן להשתמש בה גם כדי לסלק חלונות מיותרים וליציאה מתוך מיני־חוצץ. >> הקישו M-x כדי להיכנס למיני־חוצץ; אחר־כך הקישו כדי להיחלץ משם. הקשה על C-g לא תחלץ אתכם מרמות עריכה רקורסיביות. זאת, משום ש־C-g מבטל פקודות וארגומנטים _במסגרת_ הרמה הרקורסיבית, מבלי לצאת ממנה. * לקבלת עזרה נוספת ------------------ בשיעור הראשון הזה השתדלנו לתת בידיכם מידע שאך יספיק להתחלת השימוש שלכם ב־Emacs. ‏Emacs מכיל כל־כך הרבה שאין שום אפשרות לתאר ולהסביר כאן את הכל. אולם, סביר שתרצו ללמוד יותר על Emacs שכן יש בו עוד הרבה תכונות שימושיות. Emacs כולל פקודות לשם קריאת תיעוד על הפקודות של Emacs. הפעלת פקודות "עזרה" אלו תמיד מתחילה במקש CONTROL-h שעל־כן נקרא "מקש עזרה" ("help"). להפעלת פקודות עזרה יש להקיש את C-h ואחר־כך עוד תו שמבקש עזרה מסוג מסויים. אם אתם _באמת_ אבודים, הקישו C-h ?‎ ו־Emacs יציג את סוגי העזרה שהוא מעמיד לרשותכם. אם הקשתם C-h ובסופו של דבר החלטתם שאין צורך בשום עזרה, פשוט הקישו C-g לבטל את הפקודה. (אם הקשת C-h אינה מציגה בתחתית התצוגה הודעה בדבר עזרה, נסו להקיש F1 או M-x help ‎ כתחליף.) סוג העזרה הבסיס ביותר הוא C-h c. הקישו C-h, אחריו את האות c ואז הקישו סדרת מקשים שמפעילה פקודה כלשהי. Emacs יציג תיאור מאד קצר של הפקודה ההיא. >> הקישו C-h c C-p. התוצאה שתוצג צריכה להיות משהו כמו זה: C-p runs the command previous-line ההודעה הזו מראה את "שם הפונקציה". היות ושמות הפונקציות נבחרים כדי לציין מה הן עושות, השמות עשויים לשמש כתיעוד מקוצר -- מספיק כדי להזכיר לכם את הפקודות שלמדתם בעבר. ניתן לציין אחרי C-h c גם פקודות שמופעלות ע״י סדרת מקשים באורך גדול מאחד, כגון C-x C-s או ‏‎ v (כתחליף ל־M-v, אם אין מקש META או ALT). לקבלת מידע מפורט יותר על פקודה, השתמשו בפקודה C-h k במקום C-h c. >> הקישו C-h k C-p. כתוצאה, יוצגו השם והתיעוד של הפונקציה בחלון Emacs נפרד. כשתסיימו לקרוא את התיעוד, הקישו C-x 1 כדי לסלק את חלון העזרה. לא חייבים לעשות זאת מיד. אפשר לבצע קצת עריכה תוך שימוש בתיעוד המוצג ורק אחר־כך להקיש C-x 1. הנה עוד כמה פקודות עזרה שימושיות: ‏C-h f תן הסבר על פונקציה. יש להקיש את שם הפונקציה. >> נסו להקיש C-h f previous-line ‎. כתוצאה, יוצג תיעוד מלא של הפונקציה המממשת את הפקודה C-p כפי שהוא ידוע ל־Emacs. פקודה דומה C-h v מציגה תיעוד של משתנה, כולל אלו שאת הערכים שלהם ניתן לשנות כדי לקסטם את Emacs. יש להקיש את שם המשתנה כאשר Emacs יבקש זאת. ‏C-h a פקודות בנוגע לנושא מסויים. הקישו מילת מפתח ו־Emacs יציג את רשימת הפקודות ששמותיהן מכילות את מילת המפתח. כל הפקודות הללו ניתנות להפעלה ע״י META-x. עבור חלק מהפקודות תוצג גם סדרת מקשים שמפעילה את הפקודה. >> הקישו C-h a file ‎. כתוצאה מזה, יוצג חלון עם רשימה של כל הפקודות ששמותיהן מכילות את המילה "file". ביניהן תראו גם מקשי קיצור כגון C-x C-f לצד שמות הפקודות כגון find-file. >> הקישו C-M-v כדי לגלול את חלון העזרה. עשו זאת פעמים אחדות. >> עתה הקישו C-x 1 כדי לסגור את חלון העזרה. ‏C-h i הצג מדריכים למשתמש הכלולים בחבילת Emacs. (פקודה זו ידועה גם בשם "Info".) פקודה זאת פותחת חוצץ מיוחד הקרוי "*info*" שבו תוכלו לקרוא מדריכים המותקנים במערכת שלכם. הקישו m emacs ‎ כדי לקרוא במדריך למשתמשי Emacs. אם אינכם מכירים את Info, הקישו h ו־Emacs יקח אתכם לשיעור על התכונות של Info mode. כשתסיימו עם השיעור הזה, אנו בהחלט ממליצים להשתמש במדריך Emacs בתור התיעוד העיקרי שלכם. * עוד תכונות ------------ תוכלו ללמוד עוד על־אודות Emacs ע״י קריאה במדריך למשתמש שלו, אם כספר מודפס או בגירסה מקוונת בתוך Emacs עצמו. (תוכלו להגיע אל המדריך דרך תפריט Help או ע״י הקשה על C-h r.) אולם שתי תכונות שבוודאי ימצאו חן בעיניכם הן השלמה אשר חוסכת הקשות, ו־dired שמאפשרת טיפול נוח בקבצים. השלמה היא דרך להימנע מהקשות מיותרות. למשל, אם ברצונכם לעבור לחוצץ *Messages*, תוכלו להקיש C-x b *M‎ ו־Emacs ישלים את שאר האותיות של שם החוצץ ככל שניתן להסיק ממה שהקשתם. השלמה פועלת גם על שמות הפקודות ושמות קבצים. תכונת ההשלמה מתוארת במלואה במדריך למשתמש Emacs בצומת (node) בשם "Completion". ‏Dired מאפשר להציג רשימת קבצים בתיקיה (וכאפציה גם בתת־תיקיות שלה), לנוע בתוך הרשימה הזו, לפתוח קבצים, לשנות את שמותיהם, למחוק אותם ולבצע עליהם עוד פעולות רבות. Dired מתואר במלואו במדריך למשתמש בצומת בשם "Dired". בנוסף, מדריך למשתמש מתאר עוד הרבה מאד תכונות של Emacs. * לסיום ------- כדי לצאת מ־Emacs יש להקיש C-x C-c. שיעור זה נכתב כדי להיות מובן לכל המשתמשים החדשים, לכן אם מצאתם שמשהו כאן אינו ברור, אל תשבו ותאשימו את עצמכם -- תתלוננו! * זכויות שימוש -------------- שיעור זה הינו צאצא של שורה ארוכה של שיעורים בשימוש ב־Emacs, החל מהגרסה הראשונה שנכתבה ע״י Stuart Cracraft עבור גירסת ה־Emacs המקורית. גירסה זו של השיעור הינה חלק מחבילת GNU Emacs. היא מוגנת בזכויות יוצרים וניתנת להעתקה והפצת עותקים בתנאים מסויימים כדלקמן: Copyright (C) 2010-2021 Free Software Foundation, Inc. ‏GNU Emacs הינו תכנה חפשית; זכותכם להפיצו ו\או לשנותו בכפוף לתנאי הרשיון GNU General Public License, כפי שהוא יוצא לאור ע״י Free Software Foundation, אם בגרסא 3 של הרשיון, ואם (כאופציה השמורה לכם) בכל גרסא מאוחרת יותר. ‏GNU Emacs מופץ מתוך תקווה שהוא יביא תועלת, אולם ללא כל כתב אחריות; אפילו לא אחריות־במשתמע של סחירות או התאמה לאיזו תכלית מסוימת. לפרטים, אנא עיינו ב־GNU General Public License. ‏GNU Emacs אמור להיות מלווה בעותק של GNU General Public License; אם לא קיבלתם אותו, תוכלו למצוא אותו sב־‪‬. הנכם מוזמנים לקרוא את הקובץ COPYING ואז אכן לחלק עותקים של GNU Emacs לחבריכם. עזרו לנו לחסל את "הבעלות" על תוכנה שאינה אלא חבלה בתוכנה, וזאת ע״י שימוש, כתיבה ושיתוף של תוכנה חופשית! --- end of TUTORIAL.he --- ;;; Local Variables: ;;; coding: utf-8 ;;; bidi-display-reordering: t ;;; sentence-end-double-space: nil ;;; bidi-paragraph-direction: nil ;;; End: