הוספת alternative ל-VI

לפני שבוע התקנתי פדורה 15 על הלפטופ החדש שלי. כשניסיתי לערוך קובץ XML, התפלאתי לראות ש-Syntax Highlighting לא עובד. גם כאשר ניסיתי ידנית להפעיל highlighting (למרות שהוא מופעל דרך .vimrc) ולקבוע את ה-syntax כ-XML, לא קרה כלום.

לאחר בירור קצר, מסתבר כי כברירת מחדל מותקן vim-minimal, שמפנה ל /bin/vi. אין בעיה חשבתי, אתקין את vim-enhanced, ואקבל את היכולות של vim. לאחר ההתקנה שוב התאכזבתי, vim-enhanced הותקן כ /usr/bin/vim.

שאני אכתוב vim במקום vi לערוך קובץ? זה כמו שפתאום יחליטו במדינת ישראל לנהוג בצד ימן של הכביש. נתרגל בסוף, אבל כמה סבל וכמה תאונות נצטרך לעבור עד שזה יקרה…

הפתרון הקל, אני יודע, הוא פשוט ליצור alias  שיפנה את vi ל-vim. אבל כאיש System, חיפשתי פתרון יותר "מערכתי". למען האמת, מראש התפלאתי שפדורה לא השתמשו ב-alternatives, אז החלטתי לקחת את העניינים לידיים וליישם alternatives ל-vi בעצמי.

מנגנון alternatives מאפשר התקנה של כמה חבילות שמספקות את אותה הפונקציונאליות במערכת, ולנתב ביניהם, בד"כ ע"פי משקל. דוגמה קלאסית היא java. במערכת יכולים להיות מותקנים java-1.6 ו-java-1.5 בו זמנית, כאשר ל-java-1.6 יהיה משקל רב יותר, והוא יופעל כברירת מחדל. כפועל יוצא, בכל פעם מריצים את הפקודה "java", מופנים ע"י symbolic link ל- java-1.6. אז איך מכניסים את vim תחת ניהול של alternatives?

sudo yum install vim-enhanced
sudo mv /bin/vi /bin/vim.minimal
sudo alternatives --install /bin/vi vi /bin/vim.minimal 100
sudo alternatives --install /bin/vi vi /usr/bin/vim 200

אז מה יש לנו פה. הפקודה הראשונה היא כמובן התקנה של vim-enhanced.
בפקודה השניה נזיז את /bin/vi ל- /bin/vim.minimal כדי שנוכל להוסיף אותו כ-alternative עבור /bin/vi.

2 השורות הבאות יוצרות את ה-alternatives, פורמט הפקודה הוא

<alternatives --install <link> <name> <path> <priority>

כלומר, צור alternative חדש, שהנתיב שלו הוא /bin/vi, שמו הוא vi, והקובץ המקורי נמצא ב /usr/bin/vim.minimal, עם עדיפות 100.

לאחר הרצת הפקודות, ניתן להריץ את הפקודה alternatives –display vi כדי לראות את מצב ה-alternative

$ alternatives --display vi
vi - status is auto.
link currently points to /usr/bin/vim
/bin/vim.minimal - priority 100
/usr/bin/vim - priority 200
Current `best' version is /usr/bin/vim.

דוגמאות לכלים נוספים שנמצאים תחת alternatives הם mkisofs, cdrecord, lpr, sendmail

This entry was posted in linux and tagged , . Bookmark the permalink.

8 Responses to הוספת alternative ל-VI

  1. תומר says:

    במקטע הקוד הראשון, לא צריך sudo בקריאות ל־alternatives? נראה לי שהבעיה הזו קוראת גם לאחרים. האם קיים סיכוי שנראה את התיקון הזה בעדכוני ההפצה בעתיד?

    • כתריאל says:

      צודק. תוקן.
      אני לא חושב שמדובר בבאג. למשתמש רגיל לא צריכה להיות הרשאה לצור לינקים ב-/bin

  2. ik says:

    כל הבעיה הזו היא בגלל שכולם בצורה ממש לא הגיונית מעדיפים לכתוב vi במקום vim.

    אם תכתבו vim במקום vi, כל הבעיות שלכם יסתדרו. vim כאשר כותבים vi, לרוב נטען במצב vi compatible, מה שאומר שאתם מפסידים בעצם את היכולות האמיתיות של העורך טקסט הזה

    ולמרות כל זה, אף אחד לא מקשיב לי וכולם ימשיכו להשתמש עם vi במקום.

    • כתריאל says:

      קרא לי עצלן, קרא לי שמרן, קרא לי מה שאתה רוצה. אני לא מחליף שנים של הרגל בשביל הפצה אחת.

      • אני באמת לא מבין למה להמשיך עם VI. אבל אני בלינוקס רק 3 שנים וחצי כך שאני לא יכול לשכנע או להשתכנע… הפצה אחת? פדורה? למיטב ידיעתי, המצב כך ברוב ההפצות אם לא בכולן.

      • ik_5 says:

        זה לא עצלנות זה הקיבעון שהוא הבעיה. ואתה מעביר את הקיבעון הזה הלאה לאחרים. אני רואה כל משתמש מתחיל בלינוקס מקבל את הקבעון הזה של לרשום vi.

        מתוך ה man file העדכני של vi המגיע עם vim:

        Vi (visual) is a display oriented text editor based on ex(1). Ex and vi run the same code; it is possible to get to the command mode of ex from
        within vi and vice-versa.

        הוא משתמש בכלל במערכות אחרות בשביל לקבל את הקלט שלך (ex), הוא מוגבל מבחינת יכולות כי הוא במצב תאימות של vi. וכל כך קשה לך להוסיף עוד m, אז אתה משנה את כל המערכת שלך בשביל לסדר את זה. רק לי זה נראה מוזר ?!

  3. queency says:

    באובונטו אני כותב VI והוא מעלה לי את VIM
    אז מה עדיף להתקין את VI מחדש ?

    • כתריאל says:

      באובונטו (10.04, אבל אני מניח שגם בהמשך), vi כבר נמצא תחת alternatives. יש 2 חבילות vim ו-vim-tiny. אם vim מותקן, הוא יקבל עדיפות על vim-tiny.
      בקיצור, לא צריך.

כתיבת תגובה

האימייל שלך לא יוצג באתר. (*) שדות חובה מסומנים

*

תגי HTML מותרים: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">