โหลดใหม่ของการกำหนดค่า tmux ไม่คลายการผูกกุญแจ (การผูกคีย์สะสม)


33

ฉันได้ทดลองใช้การตั้งค่าปุ่มลัด tmux ที่แตกต่างกันและฉันสังเกตเห็นสิ่งต่อไปนี้:

หากฉันโหลดการกำหนดค่า tmux ของฉัน (จากภายใน tmux) การโยงคีย์ที่ฉันเคยโหลดจะยังคงโหลดอยู่ วิธีเดียวที่ฉันรู้ว่าการล้างข้อมูลนี้คือการออกจากเซสชัน tmux ทั้งหมดและรีสตาร์ท ดังนั้นดูเหมือนว่า tmux จะจดจำ keybindings ที่โหลดไว้ก่อนหน้านี้ทั้งหมดและจะลบออกเมื่อเริ่มต้นใหม่หรือโดยการผูกมัดอย่างชัดเจน

หากต้องการสร้างสิ่งนี้ใหม่:

  • เปิด terminal (A)
  • เริ่ม tmux
  • ตรวจสอบว่าการล็อคปุ่มกดแสดงนาฬิกาหรือไม่ (กดPREFIX C-t)
  • กดPREFIX ?เพื่อดูปุ่มลัดในรายการ
  • แก้ไข ~/.tmux.conf
  • เพิ่มพวงกุญแจ ( bind C-t display "Keybinding C-t")
  • โหลด tmux config ( PREFIX : source-file ~/.tmux.conf)
  • ตรวจสอบว่าปุ่มลัดทำงานได้หรือไม่ (กดPREFIX C-t)
  • กดPREFIX ?เพื่อดูปุ่มลัดใหม่ในรายการ
  • แก้ไข~/.tmux.confอีกครั้ง
  • ลบพวงกุญแจ (ดังนั้นลบbind C-t display "Keybinding C-t")
  • โหลด tmux config ( PREFIX : source-file ~/.tmux.conf)
  • ตรวจสอบว่าปุ่มลัดทำงานได้หรือไม่ (กดPREFIX C-t) มันยังคงแสดง "Keybinding Ct"
  • กดPREFIX ?เพื่อดูว่าปุ่มลัดใหม่ยังอยู่ในรายการ
  • ออกจาก tmux
  • ป้อน tmux
  • ตรวจสอบว่าการล็อคปุ่มกดดั้งเดิมทำงานได้อีกครั้ง (กดPREFIX C-t) ตอนนี้มันควรจะแสดงนาฬิกาอีกครั้ง
  • กดPREFIX ?เพื่อดูว่าการผูกกุญแจใหม่ได้ถูกลบออกจากรายการ

คำถามของฉัน: มีวิธีการสั่ง tmux เพื่อ "ลืม" โหลด configs ทั้งหมดแล้วโหลด.tmux.conf?

คำตอบ:


19

ตามtmux(1)หน้าคนunbind-key -aเป็นสิ่งที่คุณกำลังมองหา

โปรดทราบว่าtmuxใช้งานเซิร์ฟเวอร์ที่จะออกเมื่อปิดเซสชันทั้งหมดแล้วและการเชื่อมโยงคีย์คือต่อเซิร์ฟเวอร์ ดังนั้นเมื่อคุณสร้างการเชื่อมโยงแล้วจะเป็นการขัดขืนกับการแยกทั้งหมดของไคลเอ็นต์

ที่กล่าวว่าใส่unbind-key -aที่ด้านบนสุดของไฟล์การกำหนดค่าของคุณและในการกำหนดค่าโหลดมันควรจะทำในสิ่งที่คุณต้องการ - ยกเลิกการผูกทุกอย่างและเริ่มผูกพันตั้งแต่เริ่มต้น หรือ - หากการปรับเปลี่ยนของคุณมีขนาดเล็กลง - ผูกเฉพาะสิ่งที่คุณต้องการเปลี่ยนแปลง


ใช่และฉันได้ระบุไว้ในคำถามของฉันแล้ว แต่แทนที่จะ "รีเซ็ต" คีย์ทั้งหมดที่ผูกอาจด้วยตนเองฉันต้องการ tmux เพื่อเริ่มต้นใหม่ด้วย "กระดานชนวนใหม่" แล้วโหลดไฟล์ปรับแต่งใหม่
Niels Bom

@NielsBom ตรวจสอบคำตอบอัพเดทโปรด
peterph

คุณถูกต้องการunbind-key -aลบปุ่มลัดทั้งหมด ฉันจะทำเครื่องหมายคำตอบของคุณเป็นที่ถูกต้อง แต่เพราะผู้ชมอื่น ๆ ฉันยังจะเพิ่ม 'สับ' unbind-key -aผมเคยนำมาใช้ในการแก้ไขปัญหาที่มี
Niels Bom

ดูคำตอบของฉันสำหรับการแก้ปัญหาของฉัน
Niels Bom

16

ทางออกที่ถูกต้อง (โดย Peter

ดังนั้น @peterph ให้คำตอบที่ถูกต้องunbind-key -aซึ่งทำสิ่งต่อไปนี้: (man tmux)

หาก -a มีอยู่การเชื่อมโยงคีย์ทั้งหมดจะถูกลบออก

ทางออกที่สามารถทำงานได้

ปัญหา (สำหรับฉัน) ก็คือ "ทั้งหมด" จริง ๆ แล้วหมายถึงทั้งหมด รวมทั้ง keybindings tmux มาพร้อมกับ หากคุณรันunbind-key -aคำสั่ง tmux ทันทีจะไม่มีการผูกคีย์ใด ๆ อีกต่อไปดังนั้นคุณจึงไม่สามารถเข้าสู่โหมดคำสั่งหรือทำสิ่งใดโดยทั่วไป

การแก้ไขของฉัน (ค่อนข้างน่าเกลียด) สำหรับสิ่งต่อไปนี้:

  • สร้าง a .tmux.reset.confที่ลบ keybindings ทั้งหมดจากนั้น rebinds tmux ทั้งหมดที่มีตามค่าเริ่มต้น
  • แหล่งที่มาที่รีเซ็ตที่ด้านบนของคุณ .tmux.conf

ของฉัน.tmux.conf:

# always load the reset file first
source-file ~/.tmux.reset.conf

ของฉัน.tmux.reset.conf:

# First remove *all* keybindings
unbind-key -a
# Now reinsert all the regular tmux keys
bind-key C-b send-prefix
bind-key C-o rotate-window
bind-key C-z suspend-client
bind-key Space next-layout
bind-key ! break-pane
bind-key " split-window
bind-key # list-buffers
bind-key $ command-prompt -I #S "rename-session '%%'"
bind-key % split-window -h
bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key ' command-prompt -p index "select-window -t ':%%'"
bind-key ( switch-client -p
bind-key ) switch-client -n
bind-key , command-prompt -I #W "rename-window '%%'"
bind-key - delete-buffer
bind-key . command-prompt "move-window -t '%%'"
bind-key 0 select-window -t :0
bind-key 1 select-window -t :1
bind-key 2 select-window -t :2
bind-key 3 select-window -t :3
bind-key 4 select-window -t :4
bind-key 5 select-window -t :5
bind-key 6 select-window -t :6
bind-key 7 select-window -t :7
bind-key 8 select-window -t :8
bind-key 9 select-window -t :9
bind-key : command-prompt
bind-key ; last-pane
bind-key = choose-buffer
bind-key ? list-keys
bind-key D choose-client
bind-key L switch-client -l
bind-key [ copy-mode
bind-key ] paste-buffer
bind-key c new-window
bind-key d detach-client
bind-key f command-prompt "find-window '%%'"
bind-key i display-message
bind-key l last-window
bind-key n next-window
bind-key o select-pane -t :.+
bind-key p previous-window
bind-key q display-panes
bind-key r refresh-client
bind-key s choose-session
bind-key t clock-mode
bind-key w choose-window
bind-key x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key { swap-pane -U
bind-key } swap-pane -D
bind-key ~ show-messages
bind-key PPage copy-mode -u
bind-key -r Up select-pane -U
bind-key -r Down select-pane -D
bind-key -r Left select-pane -L
bind-key -r Right select-pane -R
bind-key -r M-1 select-layout even-horizontal
bind-key -r M-2 select-layout even-vertical
bind-key -r M-3 select-layout main-horizontal
bind-key -r M-4 select-layout main-vertical
bind-key -r M-5 select-layout tiled
bind-key -r M-n next-window -a
bind-key -r M-o rotate-window -D
bind-key -r M-p previous-window -a
bind-key -r M-Up resize-pane -U 5
bind-key -r M-Down resize-pane -D 5
bind-key -r M-Left resize-pane -L 5
bind-key -r M-Right resize-pane -R 5
bind-key -r C-Up resize-pane -U
bind-key -r C-Down resize-pane -D
bind-key -r C-Left resize-pane -L
bind-key -r C-Right resize-pane -R

ดูเหมือนว่านี่จะทำงานกับ tmux key-tables (เท่าที่ฉันบอกได้) แต่คุณไม่สามารถเพิ่ม key-tables ใหม่ได้


1
เป็นไปได้ว่าคุณสามารถสร้างสิ่งที่เทียบเท่ากับคุณได้อย่างรวดเร็ว.tmux.reset.confโดยทำงานtmux list-keysในเซสชั่น "สะอาด"
jw013

2
tmux -f /dev/null -L temp start-server \; list-keysจะสร้างค่าเริ่มต้นได้อย่างมีประสิทธิภาพ (แม้ว่าคุณจะต้องเพิ่มแบ็กสแลชก่อนเซมิโคลอนในการโยง)
Chris Johnsen

@ChrisJohnsen คุณช่วยกรุณาอธิบายเกี่ยวกับ start-server ด้วยคำตอบแยกกันได้ไหม?
Niels Bom

7

ขณะนี้ไม่มีวิธีโดยตรงในการรีเซ็ตการเชื่อมโยงของคีย์เป็นค่าเริ่มต้น การกำหนดค่าเริ่มต้นของการเชื่อมโยงเริ่มต้น ( key_bindings_init()เป็น) จะกระทำหนึ่งครั้งเมื่อเซิร์ฟเวอร์tmuxเริ่มทำงานครั้งแรก (ในserver_start()) และไม่มีกลไกในการรีเซ็ตคีย์เดียว

สำหรับสถานการณ์ที่คุณต้องการที่คุณต้องการการกระทำของการจัดหาแฟ้มการกำหนดค่าของคุณเพื่อกอบกู้เริ่มต้นที่มีผลผูกพันที่ถูกแทนที่โดยก่อนหน้านี้ที่กำหนดเองที่มีผลผูกพันที่มีตั้งแต่ถูกลบออกจากแฟ้มการกำหนดค่าของคุณวิธีการที่คุณวางแผนมีความสมเหตุสมผล ( แต่น่าเสียดายที่ verbose) unbind-key -a, จากนั้นสร้างการเชื่อมโยง "เริ่มต้น" ทั้งหมดใหม่จากนั้นสร้างการผูกที่กำหนดเองของคุณ (บางรายการอาจแทนที่การเชื่อมโยง "เริ่มต้น")

การเชื่อมปัจจุบันของเซิร์ฟเวอร์สามารถแตกได้ด้วยlist-keysคำสั่ง* ; สิ่งนี้สามารถช่วยสร้าง / บำรุงรักษา.tmux.reset.confไฟล์ที่เสนอของคุณแต่คุณต้องการวิธีแยกการเชื่อมโยงเริ่มต้นไม่ใช่การเชื่อมปัจจุบัน

* มีบางสถานการณ์ที่การส่งออกของที่มีlist-keysผลผูกพันสำหรับอัฒภาคต้องการอัฒภาคมันหนีไปกับเครื่องหมายที่จะป้องกันไม่ให้มันจากการถูกตีความว่าเป็น: ขณะนี้ยังไม่สามารถใช้งานได้โดยตรงtmuxคั่นคำสั่งและการผูกใด ๆ ที่มีข้อโต้แย้งว่าใช้คำพูดสองภายในครั้งเดียวอัญประกาศ (ไม่มีการผูกค่าเริ่มต้นเช่นนี้) จะออกมาเป็นเครื่องหมายคำพูดคู่ภายในqoutes สองครั้ง

ในการรับค่าเริ่มต้นการโยงคุณต้องมีเซิร์ฟเวอร์ชั่วคราวที่มีการกำหนดค่าขั้นต่ำ (เช่นไม่มีการผูกแบบกำหนดเอง) เพื่อให้คุณสามารถจับlist-keysเอาท์พุทได้ ไม่มีการ จำกัด จำนวนของเซิร์ฟเวอร์tmux ที่คุณสามารถรันได้ แต่แต่ละเซิร์ฟเวอร์ต้องใช้ชื่อพา ธ ซ็อกเก็ตที่แตกต่างกัน -Lและ-S tmuxตัวเลือกที่สามารถใช้ในการระบุชื่อซ็อกเก็ต (ใน$TMPDIR/tmux-$UIDหรือชื่อพา ธ ซ็อกเก็ตเต็มรูปแบบดังนั้นเพื่อพูดคุยกับ (หรือเริ่มต้น) เซิร์ฟเวอร์ใหม่บนซ็อกเก็ตที่มีชื่อ. tempคุณจะใช้นี้

tmux -L temp …

เพื่อให้แน่ใจว่าไม่ได้ใช้ของ.tmux.confคุณคุณใช้-fเพื่อบอกให้อ่าน/dev/null(ไฟล์พิเศษที่ว่างเสมอ):

tmux -f /dev/null -L temp …

หมายเหตุ : สิ่งนี้ไม่ได้ป้องกันการประมวลผล/etc/tmux.confหากไฟล์ดังกล่าวมีอยู่; พา ธ ไปที่ "ไฟล์การกำหนดค่าระบบ" นี้มีการกำหนดค่าตายตัวและไม่มีตัวเลือกในการเลี่ยงผ่าน (ขาดการแพตช์โค้ด)

โดยปกติคุณต้องมีnew-sessionคำสั่งเพื่อเริ่มเซิร์ฟเวอร์ แต่เราไม่ต้องการเซสชันใด ๆ เพียงแค่เซิร์ฟเวอร์เริ่มต้นเพื่อสอบถาม start-serverคำสั่งไม่เพียงแค่นั้น: เริ่มต้นเซิร์ฟเวอร์โดยไม่ต้องสร้างการประชุมใด ๆ

tmux -f /dev/null -L temp start-server …

ตอนนี้เราเพียงแค่ต้องผนวกคำสั่ง "แบบสอบถาม" ของเรา ( list-keysในกรณีนี้):

tmux -f /dev/null -L temp start-server \; list-keys

หมายเหตุ : เซมิโคลอนต้องถูกหลบหนีหรืออ้างถึงเพื่อป้องกันเชลล์ไม่ให้ถือเป็นตัวคั่นคำสั่งเชลล์เนื่องจากเราต้องการให้เป็นตัวคั่นคำสั่งtmux

เนื่องจากไม่มีเซสชันที่ต้องบำรุงรักษาเซิร์ฟเวอร์จะออกโดยอัตโนมัติหลังจากที่เสร็จสิ้นการรันlist-keysคำสั่ง

ดังนั้นคุณสามารถใช้คำสั่งเช่นนี้เพื่อสร้างกลุ่มของคุณ.tmux.reset.confโดยไม่ต้องกังวลกับการลบ.tmux.confไฟล์ของคุณชั่วคราว(เพื่อให้คุณเห็นแค่การผูกค่าเริ่มต้น) และไม่ต้องปิดเซิร์ฟเวอร์ที่มีอยู่


หากrun-shellคำสั่งนั้นเป็นแบบซิงโครนัสคุณสามารถฝังการเรียกแบบนี้ในไฟล์กำหนดค่าของคุณ (การจับภาพไปยังไฟล์ชั่วคราวที่คุณจะประมวลผลด้วยsource-file) แทนที่จะมีไฟล์สแตติก (ของคุณ.tmux.reset.conf) ซึ่งจะช่วยให้คุณใช้การเชื่อมโยงดีฟอลต์จากtmuxเวอร์ชันปัจจุบันของคุณเสมอ(การเชื่อมโยงดีฟอลต์เปลี่ยนแปลงเป็นครั้งคราว) อนิจจาความสมบูรณ์ของrun-shellคำสั่งในปัจจุบันไม่ตรงกันกับคำสั่งที่ตามมา (คำสั่งที่มาหลังจากrun-shellคำสั่งมักจะทำงานก่อนที่กระบวนการวางไข่โดยrun-shellมีโอกาสที่จะเสร็จสิ้น)


6

นี่คือการยกเลิกคำตอบอื่น ๆ ทั้งหมดในสคริปต์ทุบตีที่จะสร้างขึ้นโดยอัตโนมัติ.tmux.reset.confจากการผูกคีย์เริ่มต้น:

#!/bin/bash
tmux -f /dev/null -L temp start-server \; list-keys | \
  sed -r \
  -e "s/bind-key(\s+)([\"#~\$])(\s+)/bind-key\1\'\2\'\3/g" \
  -e "s/bind-key(\s+)([\'])(\s+)/bind-key\1\"\2\"\3/g" \
  -e "s/bind-key(\s+)([;])(\s+)/bind-key\1\\\\\2\3/g" \
  -e "s/command-prompt -I #([SW])/command-prompt -I \"#\1\"/g" \
  > ~/.tmux.reset.conf

ที่ฝังตัวอยู่sedบรรทัดคำสั่งดูแลการหลบหนีส่วนต่าง ๆ list-keysของการส่งออกจาก สิ่งนี้อาจต้องมีการปรับแต่งบางอย่างสำหรับระบบของคุณโดยเฉพาะ

ใน.tmux.confไฟล์ของคุณเพียงยกเลิกการผูกกุญแจทั้งหมดและแหล่งไฟล์นี้ก่อนกำหนดการผูกกุญแจของคุณเอง

unbind-key -a
source-file ~/.tmux.reset.conf

4

โปรดอ้างอิงคำตอบอื่น ๆ ที่นี่เช่นกันเพราะพวกเขาทำงานได้ดีในการอธิบายสถานการณ์ ฉันมีtmux 1.8 ที่เข้ากันได้ของฉันกับ tmux.reset.conf ซึ่งฉันต้องทำการแก้ไขหลายอย่างหลังจากคัดลอกtmux -f /dev/null -L temp start-server \; list-keysเอาต์พุต โดยเฉพาะอย่างยิ่งหลายสิ่งที่จะต้องยกมา

# First remove *all* keybindings
unbind-key -a
# Now reinsert all the regular tmux keys
bind-key C-b send-prefix
bind-key C-o rotate-window
bind-key C-z suspend-client
bind-key Space next-layout
bind-key ! break-pane
bind-key '"' split-window
bind-key '#' list-buffers
bind-key '$' command-prompt -I "#S" "rename-session '%%'"
bind-key % split-window -h
bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key "'" command-prompt -p index "select-window -t ':%%'"
bind-key ( switch-client -p
bind-key ) switch-client -n
bind-key , command-prompt -I "#W" "rename-window '%%'"
bind-key - delete-buffer
bind-key . command-prompt "move-window -t '%%'"
bind-key 0 select-window -t :0
bind-key 1 select-window -t :1
bind-key 2 select-window -t :2
bind-key 3 select-window -t :3
bind-key 4 select-window -t :4
bind-key 5 select-window -t :5
bind-key 6 select-window -t :6
bind-key 7 select-window -t :7
bind-key 8 select-window -t :8
bind-key 9 select-window -t :9
bind-key : command-prompt
bind-key \; last-pane
bind-key = choose-buffer
bind-key ? list-keys
bind-key D choose-client
bind-key L switch-client -l
bind-key [ copy-mode
bind-key ] paste-buffer
bind-key c new-window
bind-key d detach-client
bind-key f command-prompt "find-window '%%'"
bind-key i display-message
bind-key l last-window
bind-key n next-window
bind-key o select-pane -t :.+
bind-key p previous-window
bind-key q display-panes
bind-key r refresh-client
bind-key s choose-tree
bind-key t clock-mode
bind-key w choose-window
bind-key x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key z resize-pane -Z
bind-key { swap-pane -U
bind-key } swap-pane -D
bind-key '~' show-messages
bind-key PPage copy-mode -u
bind-key -r Up select-pane -U
bind-key -r Down select-pane -D
bind-key -r Left select-pane -L
bind-key -r Right select-pane -R
bind-key M-1 select-layout even-horizontal
bind-key M-2 select-layout even-vertical
bind-key M-3 select-layout main-horizontal
bind-key M-4 select-layout main-vertical
bind-key M-5 select-layout tiled
bind-key M-n next-window -a
bind-key M-o rotate-window -D
bind-key M-p previous-window -a
bind-key -r M-Up resize-pane -U 5
bind-key -r M-Down resize-pane -D 5
bind-key -r M-Left resize-pane -L 5
bind-key -r M-Right resize-pane -R 5
bind-key -r C-Up resize-pane -U
bind-key -r C-Down resize-pane -D
bind-key -r C-Left resize-pane -L
bind-key -r C-Right resize-pane -R

4

ฉันถามupstreamพวกเขาดูเหมือนไม่เต็มใจที่จะแก้ไข (เว้นแต่มีคนส่ง PR)

นี่คือการหลบหนีของฉันด้วยตนเองtmux list-keysได้รับผ่านอินสแตนซ์เซิร์ฟเวอร์ใหม่

tmux -f /dev/null -L temp start-server \; list-keys

(ขอบคุณคำตอบก่อนหน้า)

## See https://github.com/tmux/tmux/issues/729: How to reset key bindings to default? #729

bind-key    -T prefix C-b              send-prefix
bind-key    -T prefix C-o              rotate-window
bind-key    -T prefix C-z              suspend-client
bind-key    -T prefix Space            next-layout
bind-key    -T prefix !                break-pane
bind-key    -T prefix '"'                split-window
bind-key    -T prefix '#'                list-buffers
bind-key    -T prefix '$'                command-prompt -I '#'S "rename-session '%%'"
bind-key    -T prefix %                split-window -h
bind-key    -T prefix &                confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key    -T prefix "'"                command-prompt -p index "select-window -t ':%%'"
bind-key    -T prefix (                switch-client -p
bind-key    -T prefix )                switch-client -n
bind-key    -T prefix ,                command-prompt -I '#W' "rename-window '%%'"
bind-key    -T prefix -                delete-buffer
bind-key    -T prefix .                command-prompt "move-window -t '%%'"
bind-key    -T prefix 0                select-window -t :=0
bind-key    -T prefix 1                select-window -t :=1
bind-key    -T prefix 2                select-window -t :=2
bind-key    -T prefix 3                select-window -t :=3
bind-key    -T prefix 4                select-window -t :=4
bind-key    -T prefix 5                select-window -t :=5
bind-key    -T prefix 6                select-window -t :=6
bind-key    -T prefix 7                select-window -t :=7
bind-key    -T prefix 8                select-window -t :=8
bind-key    -T prefix 9                select-window -t :=9
bind-key    -T prefix ':'                command-prompt
bind-key    -T prefix \;                last-pane
bind-key    -T prefix =                choose-buffer
bind-key    -T prefix ?                list-keys
bind-key    -T prefix D                choose-client
bind-key    -T prefix L                switch-client -l
bind-key    -T prefix M                select-pane -M
bind-key    -T prefix [                copy-mode
bind-key    -T prefix ]                paste-buffer
bind-key    -T prefix c                new-window
bind-key    -T prefix d                detach-client
bind-key    -T prefix f                command-prompt "find-window '%%'"
bind-key    -T prefix i                display-message
bind-key    -T prefix l                last-window
bind-key    -T prefix m                select-pane -m
bind-key    -T prefix n                next-window
bind-key    -T prefix o                select-pane -t :.+
bind-key    -T prefix p                previous-window
bind-key    -T prefix q                display-panes
bind-key    -T prefix r                refresh-client
bind-key    -T prefix s                choose-tree
bind-key    -T prefix t                clock-mode
bind-key    -T prefix w                choose-window
bind-key    -T prefix x                confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key    -T prefix z                resize-pane -Z
bind-key    -T prefix {                swap-pane -U
bind-key    -T prefix }                swap-pane -D
bind-key    -T prefix '~'                show-messages
bind-key    -T prefix PPage            copy-mode -u
bind-key -r -T prefix Up               select-pane -U
bind-key -r -T prefix Down             select-pane -D
bind-key -r -T prefix Left             select-pane -L
bind-key -r -T prefix Right            select-pane -R
bind-key    -T prefix M-1              select-layout even-horizontal
bind-key    -T prefix M-2              select-layout even-vertical
bind-key    -T prefix M-3              select-layout main-horizontal
bind-key    -T prefix M-4              select-layout main-vertical
bind-key    -T prefix M-5              select-layout tiled
bind-key    -T prefix M-n              next-window -a
bind-key    -T prefix M-o              rotate-window -D
bind-key    -T prefix M-p              previous-window -a
bind-key -r -T prefix M-Up             resize-pane -U 5
bind-key -r -T prefix M-Down           resize-pane -D 5
bind-key -r -T prefix M-Left           resize-pane -L 5
bind-key -r -T prefix M-Right          resize-pane -R 5
bind-key -r -T prefix C-Up             resize-pane -U
bind-key -r -T prefix C-Down           resize-pane -D
bind-key -r -T prefix C-Left           resize-pane -L
bind-key -r -T prefix C-Right          resize-pane -R
bind-key    -T root   MouseDown1Pane   select-pane -t = \; send-keys -M
bind-key    -T root   MouseDown1Status select-window -t =
bind-key    -T root   MouseDown3Pane   if-shell -F -t = '#{mouse_any_flag}' "select-pane -t=; send-keys -M" "select-pane -mt="
# Someone also was wondering how to fix here: http://tmux-users.narkive.com/dTFVvLMh/is-it-possible-to-have-a-binding-that-brings-back-mouse-behavior
bind-key    -T root   MouseDrag1Pane   if-shell -F -t = '#{mouse_any_flag}' "if -Ft= '#{pane_in_mode}' 'copy-mode -M' 'send-keys -M' " "copy-mode -M"

bind-key    -T root   MouseDrag1Border resize-pane -M
bind-key    -T root   WheelUpPane      if-shell -F -t = '#{mouse_any_flag}' "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -et=' "
bind-key    -T root   WheelUpStatus    previous-window
bind-key    -T root   WheelDownStatus  next-window

ข้างต้นอยู่ใน GitHubดังนั้นคุณสามารถทำ:

curl -L https://raw.githubusercontent.com/timotheecour/dinocode/master/tmux_list_keys_escaped.txt > ~/.tmux.reset.conf
unbind-key -a
source-file ~/.tmux.reset.conf

หมายเหตุ: คำตอบของ Richard Cookยังคงสร้างปัญหาการหลบหนี


ยินดีต้อนรับสู่ unix.SE! เรามักจะระมัดระวังลิงค์ธรรมดาดังนั้นฉันจึงวางมันตรงนี้ (แต่เก็บลิงค์ไว้อ้างอิง) นั่นคือวิธีที่ต้องการรอบ ๆ ที่นี่ ลิงค์ตาย (ฉันรู้ว่ามันเป็น gitub! แต่ก็ยังอาจตายในบางจุด) อย่างไรก็ตามมันเป็นคำตอบที่ดี (+1) อาจจะดีกว่านี้ถ้าคุณจัดการเพื่อแก้ไขปัญหาด้วยรหัส sed ของ Richard นั่นคืออายุหนึ่งปีและ tmux มีนิสัยไม่ดีที่ไม่เข้ากันได้ 100%
grochmal

2

นี่คือคำตอบของRichard Cook ที่ได้รับการปรับแต่งเพื่อแก้ไขปัญหาการหลบหนีใน tmux 2.1

#!/bin/bash
tmux -f /dev/null -L temp start-server \; list-keys | \
    sed -r \
    -e "s/(bind-key.*\s+)([\"#~\$])(\s+)/\1\'\2\'\3/g" \
    -e "s/(bind-key.*\s+)([\'])(\s+)/\1\"\2\"\3/g" \
    -e "s/(bind-key.*\s+)([;])(\s+)/\1\\\\\2\3/g" \
    -e "s/(command-prompt -I )#([SW])/\1\"#\2\"/g" \
    -e "s/(if-shell -F -t = )#([^ ]+)/\1\"#\2\"/g" \
    > ~/.tmux.reset.conf                              

เพิ่มบรรทัดต่อไปนี้ที่จุดเริ่มต้นของ .tmux.conf

unbind-key -a
source-file ~/.tmux.reset.conf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.