חיפוש והחלף גלובלי
vi משתמש בפקודה ex כדי לבצע פעולות חיפוש והחלפה (הנקראות "החלפה" ב-vi) על פני טווח של שורות או על כל הקובץ. כדי לשנות את המילה "קו" ל"קו" עבור הקובץ כולו, נזין את הפקודה הבאה:
:%s/Line/line/g
:%s/Line/line/g
בואו נחלק את הפקודה הזו לפריטים נפרדים ונראה מה כל אחד עושה:
טבלה 12- 5: דוגמה לתחביר חיפוש והחלפה גלובלי
משמעות הפריט
משמעות הפריט
: תו המעי הגס מתחיל פקודה לשעבר.
% מציין את טווח הקווים עבור הפעולה. % הוא קיצור דרך מהשורה הראשונה לשורה האחרונה. לחלופין, ניתן היה לציין את הטווח 1,5 (מכיוון שהקובץ שלנו הוא באורך חמש שורות), או 1,$ שפירושו "משורה 1 לשורה האחרונה בקובץ." אם טווח השורות מושמט, הפעולה מתבצעת רק בקו הנוכחי.
חפש והחלף
s מציין את הפעולה. במקרה זה, החלפה (חפש והחלפה).
/Line/line/ דפוס החיפוש והטקסט החלופי.
g פירוש הדבר הוא "גלובלי" במובן שהחיפוש והחלפה מתבצע בכל מופע של מחרוזת החיפוש בשורה. אם מושמט, רק המופע הראשון של מחרוזת החיפוש בכל שורה מוחלף.
לאחר ביצוע פקודת החיפוש והחלפה שלנו הקובץ שלנו נראה כך:
השועל החום המהיר קפץ מעל הכלב העצלן. זה היה מגניב. שורה 2
קו 3
קו 4
קו 5
השועל החום המהיר קפץ מעל הכלב העצלן. זה היה מגניב. שורה 2
קו 3
קו 4
קו 5
אנו יכולים גם לציין פקודת החלפה עם אישור משתמש. זה נעשה על ידי הוספת "c" לסוף הפקודה. לדוגמה:
:%s/line/Line/gc
:%s/line/Line/gc
פקודה זו תשנה את הקובץ שלנו בחזרה לצורתו הקודמת; אולם, לפני כל החלפה, vi עוצר ומבקש מאיתנו לאשר את ההחלפה בהודעה זו:
להחליף בקו (y/n/a/q/l/^E/^Y)?
להחליף בקו (y/n/a/q/l/^E/^Y)?
כל אחת מהתווים בסוגריים היא בחירה אפשרית כדלקמן:
טבלה 12-6: החלפת מפתחות אישור
פעולת מפתח
פעולת מפתח
y בצע את ההחלפה.
n דלג על מופע זה של התבנית.
a בצע את ההחלפה על זה ועל כל המופעים הבאים של התבנית.
q או Esc צא מלהחליף.
בצע את ההחלפה ולאחר מכן צא. קיצור של "אחרון".
Ctrl-e, Ctrl-y גלול מטה וגלול למעלה, בהתאמה. שימושי לצפייה בהקשר של ההחלפה המוצעת.
אם אתה מקליד y, ההחלפה תתבצע, n יגרום vi כדי לדלג על מופע זה ולעבור למופע הבא.