איך עובדת רשימת הקפיצות של vim

01/04/2022

אחד הפיצ'רים שאני הכי אוהב ב vim הוא רשימת הקפיצות. אם אתם לא מכירים (ואולי גם אם כן) הנה הסבר קצר מה זה ולמה זה טוב.

1. קפיצה ב vim

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

  1. קפיצה לקובץ חדש עם :e.

  2. קפיצה לטקסט מסוים בקובץ עם /.

  3. קפיצה לשורה מסוימת, או ל marker מסוים.

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

  5. קפיצה לקובץ ששמו נמצא מתחת לסמן עם gf.

  6. קפיצה להגדרה של פונקציה עם gd.

ועוד המון קפיצות בסגנון זה.

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

2. טיול ברשימת הקפיצות

נניח ש jumps מראה לי את הפלט הבא:

:
 jump line  col file/text
   8     1    0 NERD_tree_1
   7    12    0 NERD_tree_1
   6     4    0 package.json
   5     1    0 src/App.vue
   4     3   24 src/main.js
   2     1    0 NERD_tree_2
   1     5    0 NERD_tree_2
>  0     1   61 import { createRouter, createWebHashHistory } from 'vue-router'
   1     1    0 ~/tmp/blog/vue/memory-game/node_modules/vue-router/dist/vue-router.d.ts

אז זה אומר שאני עכשיו מסתכל על השורה שמתחילה ב import ומסומנת בחץ. אני יכול ללחוץ על Ctrl+O כדי לזוז קפיצה אחת אחורה כדי להגיע לנווט הקבצים שנמצא בדיוק שורה אחת מעליי, או Ctrl+I כדי לקפוץ שורה אחת קדימה לקובץ vue-router.d.ts.

אפשר גם לדלג לקפיצה מסוימת, למשל לחיצה על 6 ואז על Ctrl+O תשלח אותי לקפיצה מספר 6 כלומר לקובץ package.json.

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