دليل tmux المختصر
نظرة عامة
tmux (متعدد الطرفيات) هي أداة تسمح لك بتشغيل عدة جلسات طرفية داخل نافذة طرفية واحدة. تمكنك من فصل وإعادة توصيل الجلسات، مما يجعلها مثالية للعمل عن بعد والعمليات طويلة التشغيل.
التثبيت
مديري الحزم
Would you like me to continue with the remaining sections, or do you want to provide the content for the empty sections first?```bash
Ubuntu/Debian
sudo apt install tmux
macOS
brew install tmux
CentOS/RHEL
sudo yum install tmux
Arch Linux
sudo pacman -S tmux
From source
git clone https://github.com/tmux/tmux.git cd tmux && ./configure && make && sudo make install
## Basic Concepts
### Terminology
Session # A collection of windows Window # A single terminal screen Pane # A subdivision of a window Prefix # Default Ctrl+b (customizable)
### Session Hierarchy
Session ├── Window 1 │ ├── Pane 1 │ └── Pane 2 ├── Window 2 │ └── Pane 1 └── Window 3 ├── Pane 1 ├── Pane 2 └── Pane 3
## Basic Usage
### Starting tmux
```bash
# Start new session
tmux
# Start named session
tmux new-session -s mysession
tmux new -s mysession
# Start session with specific window name
tmux new -s mysession -n mywindow
# Start detached session
tmux new -d -s mysession
Session Management
# List sessions
tmux list-sessions
tmux ls
# Attach to session
tmux attach-session -t mysession
tmux attach -t mysession
tmux a -t mysession
# Detach from session
# Inside tmux: Ctrl+b d
# Kill session
tmux kill-session -t mysession
# Kill all sessions
tmux kill-server
Key Bindings (Default Prefix: Ctrl+b)
Session Commands
Prefix + d # Detach from session
Prefix + s # List sessions
Prefix + $ # Rename session
Prefix + ( # Previous session
Prefix + ) # Next session
Window Commands
Prefix + c # Create new window
Prefix + n # Next window
Prefix + p # Previous window
Prefix + l # Last window
Prefix + w # List windows
Prefix + & # Kill window
Prefix + , # Rename window
Prefix + 0-9 # Switch to window by number
Prefix + f # Find window
Pane Commands
Prefix + % # Split horizontally
Prefix + " # Split vertically
Prefix + o # Switch to next pane
Prefix + ; # Switch to last pane
Prefix + x # Kill pane
Prefix + ! # Break pane into window
Prefix + z # Toggle pane zoom
Prefix + \\\\{ # Move pane left
Prefix + \\\\} # Move pane right
Prefix + q # Show pane numbers
Prefix + q 0-9 # Switch to pane by number
Pane Navigation
Prefix + ↑ # Move to pane above
Prefix + ↓ # Move to pane below
Prefix + ← # Move to pane left
Prefix + → # Move to pane right
Pane Resizing
Prefix + Ctrl+↑ # Resize pane up
Prefix + Ctrl+↓ # Resize pane down
Prefix + Ctrl+← # Resize pane left
Prefix + Ctrl+→ # Resize pane right
# Alternative (hold Prefix)
Prefix + Alt+↑ # Resize pane up (5 lines)
Prefix + Alt+↓ # Resize pane down (5 lines)
Prefix + Alt+← # Resize pane left (5 columns)
Prefix + Alt+→ # Resize pane right (5 columns)
Copy Mode
Enter Copy Mode
Prefix + [ # Enter copy mode
Copy Mode Navigation
h, j, k, l # Move cursor (vim-style)
Arrow keys # Move cursor
w # Next word
b # Previous word
0 # Beginning of line
$ # End of line
g # Go to top
G # Go to bottom
Ctrl+f # Page down
Ctrl+b # Page up
/ # Search forward
? # Search backward
n # Next search result
N # Previous search result
Copy Mode Selection
Space # Start selection
Enter # Copy selection and exit
Escape # Exit copy mode
v # Start selection (vi mode)
y # Copy selection (vi mode)
Paste
Prefix + ] # Paste buffer
Configuration
Configuration File (~/.tmux.conf)
# Basic settings
set -g default-terminal "screen-256color"
set -g history-limit 10000
set -g base-index 1
setw -g pane-base-index 1
# Change prefix key
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Reload config
bind r source-file ~/.tmux.conf \; display "Config reloaded!"
# Mouse support
set -g mouse on
# Vi mode
setw -g mode-keys vi
# Pane splitting
bind|split-window -h
bind - split-window -v
unbind '"'
unbind %
# Pane navigation (vim-style)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Window navigation
bind -n M-Left previous-window
bind -n M-Right next-window
# Pane resizing
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
# Status bar
set -g status-bg black
set -g status-fg white
set -g status-left '#[fg=green]#S '
set -g status-right '#[fg=yellow]%Y-%m-%d %H:%M'
set -g status-interval 60
# Window status
setw -g window-status-current-style 'fg=black bg=white'
setw -g window-status-style 'fg=white bg=black'
# Pane borders
set -g pane-border-style 'fg=colour238'
set -g pane-active-border-style 'fg=colour51'
Advanced Configuration
# Automatic window renaming
setw -g automatic-rename on
set -g set-titles on
# Activity monitoring
setw -g monitor-activity on
set -g visual-activity on
# Copy mode improvements
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'
bind -T copy-mode-vi r send-keys -X rectangle-toggle
# Synchronize panes
bind S setw synchronize-panes
# Quick pane cycling
bind -n M-o select-pane -t :.+
# Session management
bind C-s choose-session
bind C-n new-session
Advanced Features
Session Scripting
# Create session with multiple windows
tmux new-session -d -s development
tmux new-window -t development -n editor 'vim'
tmux new-window -t development -n server 'cd ~/project && npm start'
tmux split-window -t development:server -h 'cd ~/project && npm run watch'
tmux attach-session -t development
Tmux Scripts
#!/bin/bash
# dev-session.sh
SESSION="development"
# Check if session exists
tmux has-session -t $SESSION 2>/dev/null
if [ $? != 0 ]; then
# Create new session
tmux new-session -d -s $SESSION
# Setup windows
tmux rename-window -t $SESSION:1 'editor'
tmux send-keys -t $SESSION:1 'cd ~/project && vim' C-m
tmux new-window -t $SESSION -n 'server'
tmux send-keys -t $SESSION:2 'cd ~/project && npm start' C-m
tmux new-window -t $SESSION -n 'git'
tmux send-keys -t $SESSION:3 'cd ~/project && git status' C-m
# Split server window
tmux split-window -t $SESSION:2 -h
tmux send-keys -t $SESSION:2.2 'cd ~/project && npm run watch' C-m
fi
# Attach to session
tmux attach-session -t $SESSION
Tmuxinator
# Install tmuxinator
gem install tmuxinator
# Create project
tmuxinator new myproject
# Example tmuxinator config (~/.tmuxinator/myproject.yml)
name: myproject
root: ~/projects/myproject
windows:
- editor:
layout: main-vertical
panes:
- vim
- guard
- server: bundle exec rails s
- logs: tail -f log/development.log
Plugins
TPM (Tmux Plugin Manager)
# Install TPM
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
# Add to ~/.tmux.conf
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
# Initialize TPM (add to bottom of .tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
# Install plugins: Prefix + I
# Update plugins: Prefix + U
# Remove plugins: Prefix + alt + u
```### الإضافات الشائعة
```bash
# tmux-resurrect - save/restore sessions
set -g @plugin 'tmux-plugins/tmux-resurrect'
# Save: Prefix + Ctrl+s
# Restore: Prefix + Ctrl+r
# tmux-continuum - automatic save/restore
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'
# tmux-yank - copy to system clipboard
set -g @plugin 'tmux-plugins/tmux-yank'
# tmux-pain-control - better pane management
set -g @plugin 'tmux-plugins/tmux-pain-control'
# tmux-sidebar - file tree sidebar
set -g @plugin 'tmux-plugins/tmux-sidebar'
# Toggle: Prefix + Tab
```## واجهة سطر الأوامر
### إدارة الجلسات
```bash
# Create session with command
tmux new-session -d -s mysession 'htop'
# Send commands to session
tmux send-keys -t mysession 'ls -la' C-m
# Capture pane content
tmux capture-pane -t mysession -p
# List windows in session
tmux list-windows -t mysession
# List panes in window
tmux list-panes -t mysession:1
```### أمثلة البرمجة النصية
```bash
# Create development environment
create_dev_env() \\\\{
local session="dev-$(date +%s)"
tmux new-session -d -s "$session"
tmux send-keys -t "$session" 'cd ~/project' C-m
tmux split-window -t "$session" -h
tmux send-keys -t "$session" 'cd ~/project && npm start' C-m
tmux select-pane -t "$session":0
tmux attach-session -t "$session"
\\\\}
# Kill all sessions except current
kill_other_sessions() \\\\{
local current=$(tmux display-message -p '#S')
tmux list-sessions -F '#\\\\{session_name\\\\}'|\
grep -v "^$current$"|\
xargs -I \\\\{\\\\} tmux kill-session -t \\\\{\\\\}
\\\\}
```## نصائح وحيل
### نصائح الإنتاجية
```bash
# Quick session switching
bind -n M-1 switch-client -t session1
bind -n M-2 switch-client -t session2
# Broadcast to all panes
bind a setw synchronize-panes
# Quick layouts
Prefix + Space # Cycle through layouts
Prefix + Alt+1 # Even horizontal
Prefix + Alt+2 # Even vertical
Prefix + Alt+3 # Main horizontal
Prefix + Alt+4 # Main vertical
Prefix + Alt+5 # Tiled
# Zoom pane
Prefix + z # Toggle pane zoom
# Break pane to new window
Prefix + ! # Break pane out
# Join pane from another window
bind j command-prompt -p "join pane from:" "join-pane -s '%%'"
```### الأسماء المستعارة المفيدة
```bash
# Add to ~/.bashrc or ~/.zshrc
alias ta='tmux attach'
alias tls='tmux list-sessions'
alias tn='tmux new-session'
alias tk='tmux kill-session'
# Function to create or attach to session
tm() \\\\{
[[ -n "$TMUX" ]] && change="switch-client"||change="attach-session"
if [ $1 ]; then
tmux $change -t "$1" 2>/dev/null||(tmux new-session -d -s $1 && tmux $change -t "$1"); return
fi
session=$(tmux list-sessions -F "#\\\\{session_name\\\\}" 2>/dev/null|fzf --exit-0) && tmux $change -t "$session"||echo "No sessions found."
\\\\}
```## استكشاف الأخطاء وإصلاحها
### المشاكل الشائعة
```bash
# Fix 256 color support
export TERM=screen-256color
# Fix clipboard issues
# Install xclip (Linux) or reattach-to-user-namespace (macOS)
# Reset tmux completely
tmux kill-server
# Check tmux version
tmux -V
# Validate configuration
tmux source-file ~/.tmux.conf
```### الأداء
```bash
# Reduce escape time
set -sg escape-time 0
# Increase history limit
set -g history-limit 50000
# Refresh status bar less frequently
set -g status-interval 5
```## التكامل
### مع Vim/Neovim
```bash
# vim-tmux-navigator plugin
# Seamless navigation between vim and tmux panes
bind -n C-h run "(tmux display-message -p '#\\\\{pane_current_command\\\\}'|grep -iq vim && tmux send-keys C-h)||tmux select-pane -L"
bind -n C-j run "(tmux display-message -p '#\\\\{pane_current_command\\\\}'|grep -iq vim && tmux send-keys C-j)||tmux select-pane -D"
bind -n C-k run "(tmux display-message -p '#\\\\{pane_current_command\\\\}'|grep -iq vim && tmux send-keys C-k)||tmux select-pane -U"
bind -n C-l run "(tmux display-message -p '#\\\\{pane_current_command\\\\}'|grep -iq vim && tmux send-keys C-l)||tmux select-pane -R"
```### مع SSH
```bash
# Auto-attach to tmux on SSH
# Add to ~/.bashrc on remote server
if [[ -z "$TMUX" ]] && [ "$SSH_CONNECTION" != "" ]; then
tmux attach-session -t ssh_tmux||tmux new-session -s ssh_tmux
fi
```## الموارد
- **الوثائق الرسمية**: [github.com/tmux/tmux](https://github.com/tmux/tmux)
- **دليل الاستخدام**: `man tmux`
- **الويكي**: [github.com/tmux/tmux/wiki](https://github.com/tmux/tmux/wiki)
- **tmux رائع**: [github.com/rothgar/awesome-tmux](https://github.com/rothgar/awesome-tmux)