vim omnicomplete

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

אחד הדברים הכי מעצבנים שקורים לי בכל שפת תכנות, הוא שאני כותב פקודה בשגיאת כתיב. למשל שגיאה מאוד נפוצה שיש לי היא המילה include אשר לרוב אני איכשהו מגלה כי אני לא מוסיף d למתודה/פונקציה, וזו נראת כ inclue במקום, ורובי צועק עלי (בצדק, למרות שלא יפה שהוא לא מבין שזו בסה"כ שגיאת כתיב).

אז החלטתי להפעיל את התמיכה של omnicomplete אשר נכנסה ב VIM 7. אממה, מסתבר שזה לא כזה פשוט, ויש מספר צעדים שצריך להקפיד עליהם, לפני בכלל שזה יעבוד.

בראש ובראשונה, חשוב להקפיד כי vim מגיע עם Ruby. אנחנו נעשה את זה בצורה הבאה כאשר אנחנו בתוך vim:

:version

צריך להופיע שם ‏ruby+ (הפלוס לפני השם). במידה וזה מופיע שם מינוס, אז vim אינו תומך ברובי, וצריך לעבוד עם גרסה שכן.

השלב הבא, יהיה להכניס ל ‎.vimrc את השורות הבאות:

augroup ruby
  set omnifunc=rubycomplete#Complete
  let g:rubycomplete_buffer_loading = 1
  let g:rubycomplete_rails = 1
  let g:rubycomplete_classes_in_global = 1
  let g:rubycomplete_include_object = 1
  let g:rubycomplete_include_objectspace = 1
augroup END

הקוד אומר, כי כאשר אנחנו מתייחסים לקבוצה של "רובי", אנחנו נוסיף עוד פקודות. אנחנו בעצם "מדליקים" את rubycomplete#Complete אשר היא הפונקציה שמחזירה ערכים להשלמה. למעשה ה omnicomplete כבוי בברירת מחדל (למנוע code execution אשר יכול להיות מנוצל להריץ דברים זדוניים).
לאחר מכן, אנחנו מתחילים לתת הוראות איפה מותר לבדוק. את הרשימה הזו, ניתן למצוא תחת הקובץ rubycomplete.vim, במידה ואתם זקוקים לדעת מה צריך להדליק.

לאחר ההדלקה, נשמור את הקובץ, ונריץ את vim מחדש, ונערוך תוכן של רובי, כאשר הוא יודע שזה רובי (לפי סוג הקובץ, או צביעת התחביר).

כאשר נגיע למצב בו אנו רוצים להשלים משהו, נשתמש בצמד המקשים הבא בזמן עריכת הטקסט:

CTRL+X CTRL+O

השילוב הראשון מכניס אותנו למצב של omnicomplete והצמד הבא לאחר מכן, אומר לו לפתוח רשימה מתאימה להשלמות.

מאחורי הקלעים, vim בעצם מריץ קוד רובי, אשר מנסה לעשות eval לשורת הקוד, ולהחזיר מתוכה רשימת מתודות אפשרית, ואת הרשימה הזו הוא מחזיר.
אבל לא רק זה, הוא יודע להציג רק מה שצריך, לפי מה שכבר התחלנו לכתוב. כלומר אם רציתי לכתוב ‎ ‏include וכל מה שכתבתי הוא inc, הוא יצמצם את הרשימה, ובמידה ויש רק איבר אחד ברשימה, הוא ישלים אותו וזהו.

עבודה נעימה.

רשומה זו פורסמה בקטגוריה Ruby, vim, טכנולוגיה, פיתוח, קוד פתוח, תוכנה, תכנות, עם התגים , , , . אפשר להגיע ישירות לרשומה זו עם קישור ישיר.

3 תגובות על vim omnicomplete

  1. תור הגיב:

    הבעיה בכל ההשלמות האלו (זו גם אחת הסיבות שהפסקתי לעבוד עם IDE ) היא שהם מאיטות את הקצב. אתה מוצא את עצמך מחכה להשלמה וההקלדה היתה יכולה להיות יותר מהירה.

  2. Guy הגיב:

    גם אני השתמשתי די הרבה זמן ב-omnicppcomplete. קצת לפני שכתבת את הפוסט הזה, עברתי ל-clang-complete, שלפחות בשבילי היה הרבה יותר טוב. ההבדל העיקרי הוא ביכולת להשלים מתוך ספריות מבלי לייצר קובץ tags בנפרד לכל אחת.

    אתה יכול לקרוא קצת על החיפוש לי לתחליף ל-OmniCppComplete שבאמת יבין את הקוד ב-
    http://www.guyrutenberg.com/2012/03/12/bye-bye-omnicppcomplete-hello-clang-complete/

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s