tmux בפועל: חיץ גלילה

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

זהו החלק השלישי מסדרת המאמרים שלי ב- tmux בפועל.

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

ישנן מספר השפעות של שימוש במאגר חלופי:

  • כל פלט החורג מהחלק הגלוי במאגר החלופי, הולך לאיבוד. ברגע ששורות יוצאות מהעין, הן אבודות. כדי למנוע אובדן היסטוריה, tmux מיישם את מאגר הגלילה "הפנימי" שלו. התוצאה של זה היא שאתה לא יכול לעבוד עם גלילה פנימית של tmux כפי שאתה עושה בדרך כלל במסוף שלך.
  • כל פלט שמופק בתוך ה- tmux (הדבר נכון לגבי vim, nano, man, פחות וכן הלאה) אינו גולש להיסטוריית הגלילה של הטרמינל החיצוני. כשאתה סוגר את אפליקציית המסך המלא שלך, אתה חוזר לאותו מצב כאשר הפעלת את האפליקציה ולא רואה יותר פלט מתוך האפליקציה.

בפועל, אם אתה מתרגל לגלול אחורה באמצעות ה- ⌘↑iTerm שלך ואם אתה מתכוון לעשות את אותו הדבר במהלך הפעלת tmux פועלת, תוכל לשלוט ולגלול במאגר הגלילה החיצוני של iTerm, ולא במאגר הגלילה הפנימי של ה- tmux.

הפתרון הוא להשתמש tmux פקדים ספציפיים כדי לגשת חיץ אלתציגפסגלילה משלה: Ctrl-bאז [כדי להיכנס למצב עותק, שימוש Down/Upבחצים או PageDownו PageUpמפתחות, qאו Enterלמצב עותק יציאה.

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

באופן אישי, אני משתמש ב- tmux scrollback ללא פריצות לעיל, אך מתאר את תצורתו כדי להיות ידידותי ומוכר יותר.

קודם כל, אני לא אוהב prefix,[להיכנס למצב העתקה. התרגלתי ⌘↑להתחיל לגלול ב- iTerm והוספתי כריכת מקשים בסיסית הבאה:

# trigger copy mode bybind -n M-Up copy-mode

ברגע שאתה במצב העתקה, אתה יכול להמשיך ללחוץ M-Upכדי לגלול שורה אחת למעלה. כרגיל PageDownו PageUpשולטת זמינים כדי לגלול על ידי כל המסך, ואת תוספת M-PageDownו M-PageUpל המגילה על ידי מחצית מהמסך (באמת נוח).

# Scroll up/down by 1 line, half screen, whole screenbind -T copy-mode-vi M-Up send-keys -X scroll-upbind -T copy-mode-vi M-Down send-keys -X scroll-downbind -T copy-mode-vi M-PageUp send-keys -X halfpage-upbind -T copy-mode-vi M-PageDown send-keys -X halfpage-downbind -T copy-mode-vi PageDown send-keys -X page-downbind -T copy-mode-vi PageUp send-keys -X page-up

יתר על כן, גם כאשר אני בפגישה tmux בפנים, אני עדיין יכול להמשיך להשתמש ⌘↑ו ⌘↓לשלוט במאגר הפנימי tmux אלתציגפסגלילה, אלא שאחד של iterm. זה אפשרי באמצעות פרופיל iTerm מותאם אישית עם כמה כריכות מקשים שנעקפות כדי להפעיל פעולות tmux. אז ⌘↑לחוץ ב- iTerm פשוט שולח M-Upלחיצת מקשים להפעלת tmux.

קרא את החלק הקודם שלי בסדרת "tmux בפועל" לפרטים נוספים: tmux בפועל: שילוב iTerm2 ו- tmux.

ברירת המחדל של tmux אחרת שהייתי מעדיף לשנות היא גלילת גלגל העכבר. הוא גולל לפי 5 שורות, מה שמרגיש כמו קפיצה גדולה. בואו נצמצם אותו לגלילה בשתי שורות:

# When scrolling with mouse wheel, reduce number of scrolled rows per tick to "2" (default is 5)
bind -T copy-mode-vi WheelUpPane select-pane \; send-keys -X -N 2 scroll-upbind -T copy-mode-vi WheelDownPane select-pane \; send-keys -X -N 2 scroll-down

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

set -g mouse on

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

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

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

# Do not copy selection and cancel copy mode on drag end event# Prefer iTerm style selection: select, then mouse click to copy to bufferunbind -T copy-mode-vi MouseDragEnd1Panebind -T copy-mode-vi MouseDown1Pane select-pane \;\ send-keys -X copy-pipe "pbcopy" \;\ send-keys -X clear-selection

בואו לבדוק את התוצאה:

כדי לגשת לפריטי חיץ ההעתקה ולהדביק את הפריט האחרון, השתמש C-pו p:

bind p paste-bufferbind C-p choose-buffer

זהו זה להיום. המשך לעקוב. בחלק הבא של הסדרה "tmux בפועל" נדבר על שילוב הלוח וכיצד ניתן לשתף טקסט המועתק בתוך tmux עם לוח המערכת (הן במקום והן בעבודה מרחוק, על OSX ו- Linux).

BTW, אתה יכול לראות את כל אותם שינויים בתצורה בפעולה, פשוט תבדוק את ה- repo של ה- tmux-config שלי.

טריק

אם ברצונך לעקוף את מצב ההעתקה של tmux לחלוטין ולבחור טקסט באמצעות iTerm, פשוט החזק pt> key while dragging you mouse.

Resources and links

shell — What exactly is scrollback and scrollback buffer? — Unix & Linux Stack Exchange — //unix.stackexchange.com/questions/145050/what-exactly-is-scrollback-and-scrollback-buffer

tmux scrollback with iTerm2 • dan.carley.co — //dan.carley.co/blog/2013/01/11/tmux-scrollback-with-iterm2/

tmux copy mouse selected text to clipboard automatically on mouse release — Stack Overflow — //stackoverflow.com/questions/36815879/tmux-copy-mouse-selected-text-to-clipboard-automatically-on-mouse-release

keyboard shortcuts — tmux — scroll up/down with shift + page up/down into a pane — Super User — //superuser.com/questions/702189/tmux-scroll-up-down-with-shift-page-up-down-into-a-pane

[question/request] copy-mode without automatically selecting a pane? · Issue #1021 · tmux/tmux — //github.com/tmux/tmux/issues/1021

ssh — Leaving tmux scrollback in terminal (iTerm2) — Stack Overflow — //stackoverflow.com/questions/12865559/leaving-tmux-scrollback-in-terminal-iterm2

command line — Use terminal scrollbar with tmux — Super User — //superuser.com/questions/310251/use-terminal-scrollbar-with-tmux

Original text