שלום אורח התחבר

הבלוג של ינון פרק

טיפים קצרים וחדשות למתכנתים

מעדיפים לקרוא מהטלגרם? בקרו אותנו ב:@tocodeil

או הזינו את כתובת המייל וקבלו את הפוסט היומי בכל בוקר אליכם לתיבה:

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

<img src="cat.png" />

והופך אותה לשורה שנראית כך:

<img src="cat-1.png" />

כמובן שב src עצמו יכולה להיות כתובה כל מילה ולכן ביטויים רגולאריים יכולים לתת כאן פיתרון גנרי ומוצלח יותר מאשר אפשרויות אחרות. הבעיה היחידה ש vim לא רצה לשתף פעולה. ההסבר מדוע הוא קסום.

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

למצב לא קסום בכלל אנחנו נכנסים עם התו \V בתחילת הביטוי הרגולארי והוא אומר שכל התווים בביטוי מאבדים את משמעותם המיוחדת, ונצטרך לשים \\ לפני תו כדי להעניק לו משמעות מיוחדת (כולל כל התווים שבדרך כלל בביטוי רגולארי כן היתה להם משמעות מיוחדת). לכן כדי למצוא שתי ספרות בטקסט במצב לא קסום בכלל נכתוב את החיפוש:

/\V\[0-9]\[0-9]

עדיין אפשר להשתמש בקיצור \d כך שגם החיפוש הזה יעבוד:

/\V\d\d

למצב קצת קסום אנחנו נכנסים עם \M בתחילת הביטוי ומצב זה ממש דומה ל"לא קסום בכלל" מלבד התווים ^ ו $ שלא צריכים שתכתבו \\ לפניהם.

למצב קסום אנחנו נכנסים עם \m בתחילת הביטוי. מצב זה מזכיר מאוד את grep ובו רוב הסימנים המיוחדים יעבדו בלי \\ אבל עדיין יהיו מספר סימנים מיוחדים שכן יצטרכו \\ לפניהם לדוגמא +, ? ו {}.

ולמצב קסום ממש אנחנו נכנסים עם \v ושם רוב מוחלט של התווים יקבלו משמעות מיוחדת ונצטרך סימן \\ כדי לתת לתווים משמעות "רגילה".

בחזרה לדוגמא מתחילת הפוסט הביטוי הראשון שניסיתי לכתוב בוובינר היה:

:s/\vsrc="(\w+)\.(\w+)"/src="\1-1.\2"/

אבל לא נמצא אף מופע. עכשיו שלמדנו על המשמעות של Very Magic קל לראות שהבעיה היא בסימן השווה. שווה בביטוי רגולארי של וים הוא סימן שקול לסימן שאלה, ולכן בלי סימן ה \\ הוא קיבל את משמעותו המיוחדת של שאומרת שה c שלפניו מופיע פעם אחת או אפס פעמים.

התיקון הכי פשוט יהיה להוסיף \\ לפני סימן השווה ואז נקבל את הביטוי הבא שעובד:

:s/\vsrc\="(\w+)\.(\w+)"/src="\1-1.\2"/

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

:s/\Vsrc="\(\w\+\).\(\w\+\)"/src="\1-1.\2"/
:s/\msrc="\(\w\+\).\(\w\+\)"/src="\1-1.\2"/
:s/\Msrc="\(\w\+\).\(\w\+\)"/src="\1-1.\2"/

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

http://vimdoc.sourceforge.net/htmldoc/pattern.html#pattern

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

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

ואז למדתי יוניקס.

המשך קריאה...

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

ל-וים אין תמיכה מובנית בסניפטים (למרות שיש המון פלאגינים שישמחו להוסיף פונקציונאליות זו). בפוסט ננסה להוסיף את התמיכה בלי שימוש בפלאגינים תוך כתיבת קצת vimscript בעצמנו.

המשך קריאה...

וים עובד הפוך מעורכי טקסט אחרים: בעוד שעורכים רבים (וגם IDEs) שמים דגש על קלות התפעול, בוים הדגש הוא על קלות ההתאמה האישית של העורך. נתבונן למשל בפקודות אוטומטיות.

המשך קריאה...

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

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

נניח שאתם רוצים לבנות גלריית תמונות מבוססת HTML מתוך תיקיית תמונות על המחשב. עבור כל תמונה תצטרכו לרשום אלמנט img מתאים עם src ו alt, עטוף בכמה אלמנטי div כדי שיהיה קל לעצב אותו. עכשיו נניח ויש לכם כמה עשרות תמונות כאלו בתיקייה. בואו נפתח וים ונראה כיצד עורך טקסט טוב יכול לחסוך לנו הקלדה.המשך קריאה...