Làm cách nào để xoay vòng qua các ô bên trong cửa sổ trong tmux như trong màn hình?


41

Tôi nghĩ Di chuyển khung tmux sang cửa sổ là cùng một câu hỏi nhưng dường như không phải vậy.

Đến từ việc sử dụng màn hình GNU thường xuyên, tôi đang tìm tmux để làm những việc tương tự. Một trong những điều tôi làm thường xuyên là mở một vài cửa sổ khác nhau, một cửa sổ có mã mở trong vim và một vài cửa sổ đầu cuối mở để kiểm tra mã, và đôi khi một hoặc hai cửa sổ cho nhiều thứ khác. Tôi chia màn hình theo chiều dọc và thường sẽ có cửa sổ vim ở khung trên cùng và sau đó một trong các cửa sổ khác ở phía dưới.

Các lệnh chính mà sau đó tôi sử dụng là Ctrla, Tabđể xoay giữa các khung và Ctrla, nđể xoay giữa các cửa sổ trong một khung. Chẳng hạn, với vim ở khung trên cùng, tôi chuyển sang khung bên dưới và sau đó xoay qua các thiết bị đầu cuối khác, làm bất cứ điều gì tôi cần. Màn hình vẫn phân chia toàn bộ thời gian.

Vấn đề là tôi không thể tìm thấy khả năng tương đương với màn hình Ctrla, ntrong tmux. Chuyển đổi cửa sổ dường như không hoạt động trong một khung, nhưng nhảy hoàn toàn. Nếu màn hình bị phân tách, hai tùy chọn duy nhất dường như là nhảy đến một số cửa sổ không bị chia tách và sau đó tách nó ra hoặc thực hiện phân chia phụ của một khung. Không phải là những gì tôi đang tìm kiếm.

Gợi ý (ngoài việc chỉ gắn bó với màn hình)?


Thuật ngữ của bạn là một chút bối rối. Trong tmuxmột cửa sổ có thể được chia thành nhiều tấm. Bạn đang cố gắng xoay vòng giữa các tấm trong một cửa sổ với một phím bấm?
jasonwryan

Tôi đã cố gắng làm theo danh pháp của các công cụ, nhưng tôi thừa nhận nó là khó hiểu. Tôi biết làm thế nào để thay đổi tập trung từ khung này sang khung khác. Những gì tôi đang cố gắng tìm hiểu là làm thế nào để xoay vòng những gì được hiển thị trong một khung cụ thể mà không thay đổi bố cục.
FooBar

Vì vậy, để di chuyển nội dung từ một cửa sổ khác? Bạn đang tìm kiếm swap-pane? Nếu bạn đang tìm cách mô phỏng màn hình Ctrl-a n, thì tương đương tmux là Ctrl-b n.
jasonwryan

Câu trả lời:


28

tmuxmàn hình có các mô hình khác nhau nên không có chính xác tương đương.

Trong điều khoản màn hình , một phân chia cho phép bạn hiển thị nhiều cửa sổ cùng một lúc. next( C-a n) xoay các cửa sổ thông qua phần hoạt động của phần tách; điều này cho phép bạn xoay các cửa sổ ẩn ẩn của người dùng thông qua vùng hoạt động của phần tách.

Theo thuật ngữ tmux , một phần chia sẽ chia một cửa sổ thành một hoặc nhiều ô. Mỗi phần của một cửa sổ phân chia là một khung riêng lẻ, các ô không bao giờ bị ẩn (nếu một cửa sổ được chọn (hiển thị) tất cả các ô của nó cũng vậy) và một ô chỉ có thể được sử dụng trong một phần của một cửa sổ (một ô có thể không ở trong nhiều cửa sổ và không thể ở nhiều phần của cùng một cửa sổ). Có các lệnh để di chuyển các ô xung quanh trong (hoặc giữa) các cửa sổ, nhưng không phải theo cách giống hệt với nexttrong màn hình .


Bạn có thể sử dụng một ràng buộc như sau để sắp xếp một hiệu ứng tương tự:

bind-key C-n swap-pane -s :+.top \; rotate-window -Ut :+

Bạn có thể sẽ muốn đặt nó trong ~/.tmux.conftệp của mình , nhưng bạn chỉ có thể nhập / dán nó sau Prefix :để liên kết nó trong trường hợp máy chủ hiện tại của bạn.

Để sử dụng liên kết, hãy chọn cửa sổ chính trên máy tính của bạn, hãy chia nó ra, tạo một cửa sổ khung cửa sổ ngay lập tức sau cửa sổ chính của Cửa sổ, sau đó sử dụng liên kết để xoay bất kỳ cửa sổ nào trong cửa sổ chính của Nhóm khung cửa sổ container cửa sổ.

Đây là cách bạn có thể tạo thiết lập:

  • Chọn một cửa sổ để sử dụng làm cửa sổ chính của bạn. Bắt đầu (ví dụ) Vim trong đó.

  • Chia cửa sổ chính của bạn ra thành phố thành hai tấm.

    Ví dụ: Prefix "( :split-window)

    Bạn có thể sử dụng khung này làm cửa sổ thử nghiệm (hoặc trình xem nhật ký hoặc bất cứ thứ gì).

  • Tạo một cửa sổ mới (khung cửa sổ khung hình hình chữ nhật) ngay sau cửa sổ chính của bạn.

    Ví dụ: Prefix c( :new-window)

    Điều quan trọng là không có cửa sổ nào khác nằm giữa các chỉ mục của cửa sổ chính, và cửa sổ chính của ngăn chứa khung cửa sổ ( +trong các chỉ định cửa sổ được sử dụng trong các lệnh bị ràng buộc có nghĩa là Cửa sổ được đánh số cao hơn tiếp theo).

  • Chia cửa sổ này thành một số tấm. Để xoay qua ba tấm, hãy chia cửa sổ này thành hai tấm (khung thứ ba là cửa sổ trong cửa sổ chính của nhà tù).

    Có thể bạn cần shell cho git và shell để chạy giao diện cơ sở dữ liệu. Đặt từng cái trong một khung riêng biệt trong cửa sổ container này.

  • Chuyển về cửa sổ chính của bạn. Chọn khung mà bạn muốn để xoay ra ngoài.

    Bạn có thể sử dụng Prefix Up/ Down/ Left/ Rightđể di chuyển giữa các tấm.

  • Gọi liên kết để hoán đổi khung hiện tại với khung đầu tiên trong khung ngăn chứa khung cửa sổ Cửa sổ và (Cửa sổ phía sau cảnh) hoán đổi với khung cửa sổ tiếp theo của người Viking trong chuỗi).

    Prefix Control- n(ràng buộc sử dụng Cn, nhưng bạn có thể thay đổi điều này thành bất cứ điều gì bạn thích).

  • Để cuộn ngược qua các tấm, bạn có thể sử dụng như sau:

khóa liên kết Cp trao đổi-khung -s: +. bottom \; cửa sổ xoay -Dt: +

Cảm ơn bạn! Giải thích tuyệt vời và ràng buộc được đề xuất của bạn dường như ít nhất là sao chép chức năng mà tôi đang tìm kiếm.
FooBar

Xin lỗi, làm thế nào một cái có thể kích thước đầy đủ một khung và sau đó trao đổi trở lại sự sắp xếp trước đó
MageProspero

1
@JamesAndino: tmux 1.8 có resize-pane -Z(theo mặc định, bị ràng buộc với Tiền tố + z) tạm thời phóng to thu nhỏ một khung để có kích thước đầy đủ của cửa sổ. Đối với phiên bản trước 1.8, không có cách tích hợp nào để thực hiện; những người khác đã tạo ra các giải pháp theo kịch bản từ các lệnh dựng sẵn khác (ví dụ: một số câu trả lời cho câu hỏi SU Tối đa hóa tối đa một khung trong tmux ).
Chris Johnsen

ty, được biên dịch và tải
MageProspero

3
Tôi tin rằng C-b ochu kỳ panes.
Sam Selikoff

39

Tôi tin rằng những gì bạn đang tìm kiếm là Ctrlb+ ( , , , ). Những người sẽ cho phép bạn di chuyển giữa các tấm.


2
Tôi xin lỗi, nhưng tôi không rõ lắm. Tôi đã tìm ra cách di chuyển từ bảng này sang bảng khác. Trong tmux Ctrl b + o các chức năng tương tự như Ctrl a + Tab trong màn hình. Những gì tôi đang tìm kiếm là chức năng tương đương như Ctrl a + n của màn hình.
FooBar

@FooBar thế nào Ctrl-b+{hay Ctrl-b+}? Đó là gần như tôi có thể tìm thấy chức năng đó. Pane không thực hiện theo cách tương tự trong tmux khi chúng được xử lý trên màn hình.
sparticvs

Tôi thường gặp khó khăn khi tập trung vào ô được tô sáng, nói rằng tôi có hai tấm, tôi thường nhấn ^b↑. Làm thế nào để tôi thực sự tập trung vào ô được tô sáng sao cho cái khác sẽ được bắt bởi shell chứ không phải tmux?
ThorSummoner

6

sử dụng bind -r, do đó bạn có thể nhấn prefixmột lần, sau đó các phím khác theo trình tự để xác định vị trí khung của bạn. Thời gian chờ có thể được điều chỉnh bởi repeat-time. Kiểm traman tmux

bind -r Tab select-pane -t :.+

Nếu bạn thích hjkl,

bind -r h select-pane -L
bind -r j select-pane -D
bind -r k select-pane -U
bind -r l select-pane -R

2

Dưới đây là một conf nhỏ cho phép bạn di chuyển đến các ô hoặc cửa sổ anohter bằng cách sử dụng các phím tắt ALT hoặc SHIFT + mũi tên. Không cần sử dụng tiền tố chính là confortable.

## NAVIGATION: ############################

# Switch panes 
# Usage: "ALT+arrow keys" (without prefix key)
# from https://gist.github.com/spicycode
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# Switch windows 
# usage: "SHIFT+arrow" (without prefix key)
bind -n S-Left  previous-window
bind -n S-Right next-window

Nếu bạn lười hơn tôi, bạn cũng có thể quan tâm bởi đoạn mã sau cho phép điều hướng panes bằng chuột. (cách sử dụng: tiền tố khóa + m để bật, M để tắt)

## MOUSE CONTROL: #########################
set -g mode-mouse off
set -g mouse-resize-pane off
set -g mouse-select-pane off
set -g mouse-select-window off

# Toggle mouse on 
bind m \
    set -g mode-mouse on \;\
    set -g mouse-resize-pane on \;\
    set -g mouse-select-pane on \;\
    set -g mouse-select-window on \;\
    display 'Mouse: ON'

# Toggle mouse off
bind M \
    set -g mode-mouse off \;\
    set -g mouse-resize-pane off \;\
    set -g mouse-select-pane off \;\
    set -g mouse-select-window off \;\
    display 'Mouse: OFF'

cấu hình này sẽ hoạt động chắc chắn cho tmux 1.6 đến 1.9.


2

Câu trả lời này cung cấp cho bạn hai bảng, trong đó cả hai bảng giữ cùng một bộ cửa sổ, nhưng mỗi khung có thể chuyển đổi độc lập giữa các cửa sổ.

Cách tiếp cận tmux là sử dụng ba phiên:

  • một phiên bên ngoài cho các tấm ,
  • một phiên bên trong cho các cửa sổ (bạn có thể đính kèm vào đây từ một khung),
  • một khung nhìn thứ cấp vào phiên bên trong (đối với khung khác).

Vâng, đây là triết lý UNIX phát điên. Bắt đầu nào:

# Create a session to hold the multiple windows
$ tmux new-session -s inner

    <Ctrl-b> c   to create a few windows, run some things

    <Ctrl-b> d   to detach, but leave it running

# Create a session to hold multiple panes (the view)
$ tmux new-session -s outer

    <Ctrl-b> "   to split

# Open the inner session in the current (bottom) pane
$ unset TMUX ; tmux attach -t inner

Bây giờ bạn có thể chuyển sang khung trên cùng và mở Vim như bình thường. Để xoay vòng qua các cửa sổ trong phiên bên trong (khung bên dưới), bạn sẽ cần sử dụng Ctrl-b Ctrl-b np.

Ngoài ra: Điều đó hơi khó sử dụng nhưng bạn luôn có thể thay đổi tiền tố của phiên bên ngoài, ví dụ như Ctrl-a, như sau:

<Ctrl-b> :set-option prefix C-a

Sau đó, nó sẽ chỉ Ctrl-b npxoay vòng các cửa sổ bên trong, và Ctrl-a oxoay vòng các tấm bên ngoài.

Bây giờ, thay vì mở Vim ở khung trên cùng, hãy kết nối lại với phiên bên trong của bạn. Thoát khỏi vim và lần này sử dụng một new-sessionlệnh (đáng chú ý là -tkhông -s):

$ tmux new-session -t inner

Voila! Bây giờ bạn có thể quay vòng qua các cửa sổ trên cả hai tấm trên cùng và dưới cùng.

Lý do chúng ta phải sử dụng new-session -tlần thứ hai là nếu chúng ta chỉ cần làm attach -tlại, thì các ô trên cùng và dưới cùng sẽ được đồng bộ hóa, luôn hiển thị cùng một cửa sổ, đó không phải là điều bạn muốn. Để cho khung này di chuyển qua các cửa sổ một cách độc lập với khung khác, chúng tôi tạo một phiên "xem" mới nhưng kết nối trực tiếp mặt sau của nó với phiên hiện có giữ các cửa sổ. Điều này còn được gọi là " phiên nhóm ". (Nhân tiện, liên kết đó cũng gợi ý sử dụng [un]link-windowđể di chuyển các cửa sổ giữa các phiên.)

Tất nhiên đối với đối xứng, bạn cũng có thể đã chạy tmux new-session -t innertrong khung dưới cùng, thay vì attach. Trong trường hợp đó, bạn sẽ chạy 4 phiên bản tmux (cộng thêm một quy trình tmux cho máy chủ)!


0

Đặt mã sau vào .tmux.conf:

# cycle prev/next pane
bind -n S-right select-pane -t :.+
bind -n S-left select-pane -t :.-

Tải lại cấu hình, sau đó bạn có thể nhấn (trực tiếp không có phím tiền tố) Shift+ để xoay vòng theo chiều kim đồng hồ và Shift+ để xoay theo hướng ngược lại.

Đã thử nghiệm trong Tmux 2.8.


Trong trường hợp bạn không muốn chỉnh sửa cấu hình, prefix+ olà ràng buộc khóa mặc định cho chu kỳ theo chiều kim đồng hồ. Thỉnh thoảng tôi thấy khóa này ràng buộc, sau đó tôi nhận lệnh từ tmux list-keysvà sử dụng nó cho các ràng buộc khóa của riêng tôi:

bind-key    -T prefix       o                 select-pane -t :.+
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.