1
0
mirror of https://shylinux.com/x/ContextOS synced 2025-04-25 08:48:06 +08:00
This commit is contained in:
shaoying 2018-09-21 09:38:01 +08:00
parent 9f23e5f6b4
commit accea56aa4
3 changed files with 391 additions and 205 deletions

View File

@ -47,8 +47,8 @@ bind 6 select-window -t :6
bind i display-panes
bind x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind u split-window
bind v split-window -h
bind u split-window -c "#{pane_current_path}"
bind v split-window -h -c "#{pane_current_path}"
bind C-o last-pane
bind h select-pane -L
@ -72,6 +72,26 @@ bind z paste-buffer
# tmux 1.x{{{
if-shell "[ `tmux -V |cut -d' ' -f2|cut -d'.' -f1` -lt '2' ]" "\
set -g mouse-select-window on; \
set -g mouse-select-pane on; \
set -g mouse-resize-pane on; \
"# }}}
# tmux 2.x# {{{
if-shell "[ `tmux -V |cut -d' ' -f2|cut -d'.' -f1` -gt '1' ]" "\
set -g mouse on; \
"
# }}}
# tmux-2.6 or other{{{
if-shell "[ `tmux -V |cut -d' ' -f2|cut -d'.' -f1` = '2' -a `tmux -V |cut -d' ' -f2|cut -d'.' -f2` = '6' ]" "\
bind -T copy-mode-vi e send-keys -X scroll-down; \
bind -T copy-mode-vi y send-keys -X scroll-up; \
bind -T copy-mode-vi d send-keys -X halfpage-down; \
bind -T copy-mode-vi u send-keys -X halfpage-up; \
bind -T copy-mode-vi f send-keys -X page-down; \
bind -T copy-mode-vi b send-keys -X page-up; \
bind -T copy-mode-vi v send-keys -X begin-selection; \
bind -T copy-mode-vi c send-keys -X copy-selection; \
" "\
bind -t vi-copy e scroll-down; \
bind -t vi-copy y scroll-up; \
bind -t vi-copy d halfpage-down; \
@ -82,37 +102,7 @@ if-shell "[ `tmux -V |cut -d' ' -f2|cut -d'.' -f1` -lt '2' ]" "\
bind -t vi-copy c copy-selection; \
bind -t vi-edit C-n history-down; \
bind -t vi-edit C-p history-up; \
bind -t vi-copy Space page-down; \
set -g mouse-select-window on; \
set -g mouse-select-pane on; \
set -g mouse-resize-pane on; \
"# }}}
# tmux 2.x# {{{
if-shell "[ `tmux -V |cut -d' ' -f2|cut -d'.' -f1` -gt '1' ]" "\
set -g mouse on; \
"
# }}}
# tmux 2.3{{{
if-shell "[ `tmux -V |cut -d' ' -f2|cut -d'.' -f1` = '2' -a `tmux -V |cut -d' ' -f2|cut -d'.' -f2` = '3']" "\
# bind -T copy-mode-vi y send-keys -X scroll-down; \
# bind -T copy-mode-vi e send-keys -X scroll-up; \
# bind -T copy-mode-vi d send-keys -X halfpage-down; \
# bind -T copy-mode-vi u send-keys -X halfpage-up; \
# bind -T copy-mode-vi f send-keys -X page-down; \
# bind -T copy-mode-vi b send-keys -X page-up; \
# bind -T copy-mode-vi v send-keys -X begin-selection; \
# bind -T copy-mode-vi c send-keys -X copy-selection; \
"
# }}}
# tmux 2.6{{{
if-shell "[ `tmux -V |cut -d' ' -f2|cut -d'.' -f1` = '2' -a `tmux -V |cut -d' ' -f2|cut -d'.' -f2` = '6' ]" "\
bind -T copy-mode-vi y send-keys -X scroll-down; \
bind -T copy-mode-vi e send-keys -X scroll-up; \
bind -T copy-mode-vi d send-keys -X halfpage-down; \
bind -T copy-mode-vi u send-keys -X halfpage-up; \
bind -T copy-mode-vi f send-keys -X page-down; \
bind -T copy-mode-vi b send-keys -X page-up; \
bind -T copy-mode-vi v send-keys -X begin-selection; \
bind -T copy-mode-vi c send-keys -X copy-selection; \
bind -t vi-edit C-b cursor-left; \
bind -t vi-edit C-f cursor-right; \
"
# }}}

View File

@ -1,3 +0,0 @@
export PROMPT='vps%![%*]%c$ '
export GOPATH=~/etcvpn:$GOPATH

View File

@ -92,9 +92,14 @@ $ brew install the_silver_searcher
$ sudo apt-get install silversearcher-ag
```
### tmux使用
tmux是终端管理软件可以将一个窗口分隔成任意多个终端这样就可以在一个窗口中同时执行多条命令。
而且tmux在后台运行服务即使窗口关闭或是网络连接断开了终端依然在运行可以重新连接窗口的所有数据不会丢失。
所以tmux可以极大的提高工作的效率和连续性。
在开发与测试的过程中经常会同时处理多个事情就用到多个终端窗口可以使用SecureCRT、PuTTY、Terimal、iTerm、Konsole等软件去管理这些终端。
不过窗口一多,在一堆标签中来回切换窗口,简直是恶梦一样,经常会翻来翻去,搞半天才能找到自己想用的终端窗口。
而且尤其是连接远程服务器,网络一但断开,所有的窗口就要重新连接,而且终端里的操作历史基本上就废了,很多工作就要重新操作一遍了。
tmux就是一款极其强大的终端管理软件。
它不仅可以把一个窗口分隔成任意多个小窗口每个窗口都是一个独立的终端像IDE一样把几个相关的终端窗口放在一个界面中。
而且即使网络中断也不会丢失任何数据,重新连接后可以继续工作,不会感觉出现场环境有任何变化。
仅凭这两点tmux就可以极大的提高工作的效率和工作连续性。
Ubuntu上安装tmux
```
@ -104,53 +109,56 @@ Mac上安装tmux
```
$ brew install tmux
```
Windows上安装tmux还是算了太折腾了。
Windows上安装tmux还是算了太折腾了,放弃吧,兄弟
启动或连接tmux。
```
$ tmux
```
每次在终端运行tmux命令tmux首先连接后台服务如果服务进程不存在就会创建一个后台服务进程。
服务启动后和普通终端一样就可以在tmux的窗口中执行各种命令行。
每次在终端运行tmux命令时tmux命令本身作为一个客户端会去连接后台服务如果服务进程不存在就会创建一个后台服务进程。
所以tmux是以CS的服务模式管理终端的即使网络中断了客户端退出了所有的运行终端都完整的保存在服务进程中。
服务启动后和普通终端一样就可以在tmux的窗口中执行各种命令行了。
tmux有三种交互方式快捷键命令行配置文件。
#### tmux快捷键体验
tmux默认的控制键是Ctrl+b然后再输入命令字符。就可以对tmux进行各种控制。
如下按下Ctrl+b然后再按引号键就可以将当前终端分隔成上下两个终端。
示例如下按下Ctrl+b然后再按引号键就可以将当前终端窗口分隔成上下两个终端。
```
Ctrl+b "
```
如下按下Ctrl+b然后再按百分号键就可以将当前终端分隔成左右两个终端。
示例如下按下Ctrl+b然后再按百分号键就可以将当前终端窗口分隔成左右两个终端。
```
Ctrl+b %
```
如下按下Ctrl+b然后再按字母o就可以在两个终端来回切换。
示例如下按下Ctrl+b然后再按字母o就可以在两个终端窗口间来回切换。
```
Ctrl+b o
```
如下按下Ctrl+b然后再按字母c就可以创建一个新窗口。
示例如下按下Ctrl+b然后再按字母c就可以创建一个新窗口。
```
Ctrl+b c
```
如下按下Ctrl+b然后再按字母n就可以切换到一个窗口。
示例如下按下Ctrl+b然后再按字母n就可以切换到一个窗口。
```
Ctrl+b n
```
如下按下Ctrl+b然后再按字母p就可以切换到一个窗口。
示例如下按下Ctrl+b然后再按字母p就可以切换到一个窗口。
```
Ctrl+b p
```
如下按下Ctrl+b然后再按字母d就会断开当前连接回到原始的终端窗口但tmux会话中的所有终端都还在运行。
示例如下按下Ctrl+b然后再按字母d就会断开当前连接回到原始的终端窗口但tmux会话中的所有终端都还在运行。
```
Ctrl+b d
```
在终端中执行tmux命令tmux会重新连接会话。
断开连接后,在终端中再次执行tmux命令tmux会重新连接会话,之前的窗口都会原样打开
```
$ tmux
```
如下按下Ctrl+b然后再按问号?就可以查看所有快捷键。可以按方向键上下翻页按字母q可以退出查看。
示例如下按下Ctrl+b然后再按问号?就可以查看所有快捷键。可以按方向键上下翻页按字母q可以退出查看。
```
Ctrl+b ?
```
@ -192,177 +200,368 @@ Ctrl+b : set status on <Enter>
Ctrl+b : set status on <Enter>
```
#### tmux客户端与会话
tmux是以CS的服务模型实现窗口管理。
tmux的后台服务负责管理客户端与会话的连接。可以同时管理多个会话多个客户端所以可以支持多个人同时连接服务。
而且多个客户端可以连接同一个会话,多个客户端是完全一样界面,从而实现屏幕共享,协同操作。
#### tmux功能详解
每次运行tmux都会启动一个客户端client每个客户端client会连接到服务端server下的某一个会话session。
当然多个客户端client可以连接同一个会话session所以client与session是多对一的关系。
每一个会话session下面可以管理多个窗口window每个窗口window可以被分隔成多个窗格pane每个窗格pane就是一个独立的终端teriminal。
所以从server->session->window->pane就形成一个树状的结构每个叶子节点就是pane即一个终端。
命令如下,查看客户端列表。
```
$ tmux list-clients
/dev/ttys000: context [158x42 xterm-256color] (utf8)
```
其中"/dev/ttys000"就是客户端设备, "context"是会话名,"158x42"是窗口宽高utf8是字符集。
命令的详细定义可以查man手册"man tmux",可以查看每条命令的详细定义。
```
list-clients (lsc) [-F format] [-t target-session]
```
其中"list-clients"是命令lsc是命令简写
"-F format",可以指定输出内容格式,
"-t target-session",可以查看指定会话下有多少客户端连接,默认查看所有会话下的客户端。
查看所有会话session
```
list-sessions (ls) [-F format]
```
查看某会话或所有会话下的所有窗口window
```
list-windows (lsw) [-a] [-F format] [-t target-session]
```
查看某窗口或所有窗口下的所有空格pane
```
list-panes (lsp) [-as] [-F format] [-t target-window]
```
除了终端管理tmux还提供了缓存管理方便在终端间复制文字。tmux会保存每次复制的内容。
```
list-buffers (lsb) [-F format]
```
查看所有命令行
```
list-commands (lscm) [-F format]
```
查看所有快捷键
```
list-keys (lsk) [-t mode-table] [-T key-table]
```
#### tmux会话管理
新建会话
```
new-session (new) [-AdDEP] [-c start-directory] [-F format] [-n window-name] [-s session-name] [-t target-session] [-x width] [-y height] [command]
```
- "-s session-name" 指定会话名
- "-n window-name" 指定初始窗口的名字
- "-c start-directory" 设定起始目录
- "-d" 会话创建成功后,不自动连接
- "-x width" 指定窗口宽度
- "-y width" 指定窗口调试
- "-A" 如果会话存在就自动连接
- "-D" 自动连接会话时,断开会话与其它客户端连接
- "-t target-session" 创建共享会话新会话session-name与已存在的target-session共享所有窗口
- "-P format" 指定命令输出的格式
- "command" 窗口创建成功后执行的shell命令
会话管理
会话是否存在
```
has-session (has) [-t target-session]
```
重命名会话
```
rename-session (rename) [-t target-session] new-name
```
连接会话
```
attach-session (attach) [-dEr] [-c working-directory] [-t target-session]
```
锁定会话
```
lock-session (locks) [-t target-session]
```
删除会话
```
kill-session (killp) [-a] [-t target-pane]
```
- list-sessions
- has-session
- new-session
- kill-session
- rename-session
- attach-session
#### tmux窗口管理
创建窗口
```
new-window (neww) [-adkP] [-c start-directory] [-F format] [-n window-name] [-t target-window] [command]
```
重命令窗口
```
rename-window (renamew) [-t target-window] new-name
```
查找窗口
```
find-window (findw) [-CNT] [-F format] [-t target-window] match-string
```
客户端管理
切换最近使用的窗口
```
last-window (last) [-t target-session]
```
切换下一个的窗口
```
next-window (next) [-a] [-t target-session]
```
切换上一个的窗口
```
previous-window (prev) [-a] [-t target-session]
```
- list-clients
- detach-client
- switch-client
- refresh-client
- suspend-client
交换两个窗口的位置
```
swap-window (swapw) [-d] [-s src-window] [-t dst-window]
```
移动窗口到指定位置
```
move-window (movew) [-dkr] [-s src-window] [-t dst-window]
```
镜像出一个窗口
```
link-window (linkw) [-dk] [-s src-window] [-t dst-window]
```
删除镜像
```
unlink-window (unlinkw) [-k] [-t target-window]
```
删除窗口
```
kill-window (killw) [-a] [-t target-window]
```
激活窗口
```
respawn-window (respawnw) [-k] [-t target-window] [command]
```
其它管理
分隔窗口
```
split-window (splitw) [-bdfhvP] [-c start-directory] [-F format] [-p percentage|-l size] [-t target-pane] [command]
```
- start-server
- kill-server
- list-commands
- source-file
- show-messages
- lock-session
- lock-client
循环移动窗口位置
```
rotate-window (rotatew) [-DU] [-t target-window]
```
#### tmux窗口与面板
list-windows
find-window
last-window
next-window
previous-window
select-window
窗口切换到下一种布局
```
next-layout (nextl) [-t target-window]
```
窗口切换到上一种布局
```
previous-layout (prevl) [-t target-window]
```
new-window
move-window
swap-window
link-window
unlink-window
kill-window
respawn-window
rename-window
显示所有窗口的序号
```
display-panes (displayp) [-t target-client]
```
rotate-window
split-window
```
last-pane (lastp) [-de] [-t target-window]
swap-pane (swapp) [-dDU] [-s src-pane] [-t dst-pane]
move-pane (movep) [-bdhv] [-p percentage|-l size] [-s src-pane] [-t dst-pane]
join-pane (joinp) [-bdhv] [-p percentage|-l size] [-s src-pane] [-t dst-pane]
kill-pane (killp) [-a] [-t target-pane]
resize-pane (resizep) [-DLMRUZ] [-x width] [-y height] [-t target-pane] [adjustment]
respawn-pane (respawnp) [-k] [-t target-pane] [command]
next-layout
previous-layout
select-layout
list-panes
display-panes
last-pane
select-pane
move-pane
swap-pane
join-pane
kill-pane
break-pane
respawn-pane
resize-pane
capture-pane
pipe-pane
choose-client
choose-session
choose-window
choose-tree
choose-list
bind-key
list-keys
send-keys
send-prefix
unbind-key
#### tmux配置文件
assume-paste-time
base-index
bell-action
bell-on-alert
default-shell
default-command
default-terminal
desctroy-unattached
detach-on-destroy
display-panes-active-colour
display-pnaes-colour
display-panes-time
display-time
history-limit
lock-after-time
lock-command
lock-server
message-command-style
message-style
message-limit
mouse-resize-pane
mouse-select-pane
mouse-select-window
mouse-utf8
pane-active-border-style
pane-border-style
prefix
prefix2
renumber-windows
repeat-time
set-remain-on-exit
set-titles
set-titles-string
status
status-interval
status-justify
status-keys
status-left
status-left-length
status-left-style
status-right
status-right-length
status-right-style
status-position
status-style
status-utf8
terminal-overrides
update-environment
visual-activity
visual-bell
visual-content
visual-silence
word-separators
break-pane (breakp) [-dP] [-F format] [-s src-pane] [-t dst-window]
capture-pane (capturep) [-aCeJpPq] [-b buffer-name] [-E end-line] [-S start-line][-t target-pane]
pipe-pane (pipep) [-o] [-t target-pane] [command]
```
```
choose-client (capturep) [-aCeJpPq] [-b buffer-name] [-E end-line] [-S start-line][-t target-pane]
choose-session (capturep) [-aCeJpPq] [-b buffer-name] [-E end-line] [-S start-line][-t target-pane]
choose-window (capturep) [-aCeJpPq] [-b buffer-name] [-E end-line] [-S start-line][-t target-pane]
choose-buffer (capturep) [-aCeJpPq] [-b buffer-name] [-E end-line] [-S start-line][-t target-pane]
choose-tree (capturep) [-aCeJpPq] [-b buffer-name] [-E end-line] [-S start-line][-t target-pane]
select-layout (selectl) [-nop] [-t target-window] [layout-name]
select-window (selectw) [-lnpT] [-t target-window]
select-pane (selectp) [-DdegLlMmRU] [-P style] [-t target-pane]
```
#### tmux缓存管理
list-buffers
show-buffer
save-buffer
load-buffer
set-buffer
delete-buffer
choose-buffer
paste-buffer
clear-history
```
show-buffer (showb) [-b buffer-name]
load-buffer (loadb) [-b buffer-name] path
save-buffer (saveb) [-a] [-b buffer-name] path
paste-buffer (pasteb) [-dpr] [-s separator] [-b buffer-name] [-t target-pane]
set-buffer (setb) [-a] [-b buffer-name] [-n new-buffer-name] data
delete-buffer (deleteb) [-b buffer-name]
clear-history (clearhist) [-t target-pane]
copy-mode (confirm) [-p prompt] [-t target-client] command
```
#### tmux状态行
display-message
confirm-before
command-prompt
#### tmux快捷键与命令行
```
bind-key (bind) [-cnr] [-t mode-table] [-R repeat-count] [-T key-table] key command [arguments]
unbind-key (unbind) [-acn] [-t mode-table] [-T key-table] key
send-keys (send) [-lRM] [-t target-pane] key ...
send-prefix (send) [-lRM] [-t target-pane] key ...
clock-mode (clearhist) [-t target-pane]
```
#### tmux其它命令
clock-mode
server-info
lock-server
if-shell
run-shell
wait-for
```
display-message (display) [-p] [-c target-client] [-F format] [-t target-pane] [message]
show-messages (showmsgs) [-JT] [-t target-client]
show-options (show) [-gqsvw] [-t target-session|target-window] [option]
set-option (set) [-agosquw] [-t target-window] option [value]
source-file (source) [-q] path
confirm-before (confirm) [-p prompt] [-t target-client] command
command-prompt (clearhist) [-t target-pane]
show-environment (showenv) [-gs] [-t target-session] [name]
set-environment (setenv) [-gru] [-t target-session] name [value]
run-shell (run) [-b] [-t target-pane] shell-command
if-shell (if) [-bF] [-t target-pane] shell-command command [command]
wait-for (wait) [-L|-S|-U] channel
set-hook (setenv) [-gru] [-t target-session] name [value]
show-hooks (showenv) [-gs] [-t target-session] [name]
```
#### tmux缓存管理
#### tmux客户端与服务端
```
refresh-client (refresh) [-S] [-C size] [-t target-client]
suspend-client (suspendc) [-t target-client]
switch-client (switchc) [-Elnpr] [-c target-client] [-t target-session] [-T key-table]
detach-client (detach) [-P] [-a] [-s target-session] [-t target-client]
lock-client (lockc) [-t target-client]
```
```
server-info (info)
start-server (start)
kill-server (killp) [-a] [-t target-pane]
lock-server (lock)
```
#### tmux服务配置
```
buffer-limit 20
default-terminal "screen"
escape-time 500
exit-unattached off
focus-events off
history-file ""
message-limit 100
quiet off
set-clipboard on
terminal-overrides "xterm*:XT:Ms=\E]52;%p1%s;%p2%s\007:Cs=\E]12;%p1%s\007:Cr=\E]112\007:Ss=\E[%p1%d q:Se=\E[2 q,screen*:XT"
```
#### tmux会话配置
```
mouse on
prefix C-s
prefix2 None
base-index 1
renumber-windows on
history-limit 50000
status on
status-keys vi
status-interval 15
status-justify left
status-position bottom
status-style fg=black,bg=green
status-left "[#S] "
status-left-length 10
status-left-style default
status-right " "#{=21:pane_title}" %H:%M %d-%b-%y"
status-right-length 40
status-right-style default
message-style fg=black,bg=yellow
message-command-style fg=yellow,bg=black
visual-activity off
visual-bell off
visual-silence off
bell-action any
bell-on-alert off
set-titles off
set-titles-string "#S:#I:#W - "#T" #{session_alerts}"
word-separators " -_@"
display-panes-active-colour red
display-panes-colour blue
display-panes-time 5000
display-time 5000
repeat-time 500
assume-paste-time 1
key-table "root"
destroy-unattached off
detach-on-destroy on
set-remain-on-exit off
default-command ""
default-shell "/bin/zsh"
lock-after-time 0
lock-command "lock -np"
update-environment "DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"
```
#### tmux窗口配置
```
set-window-option (setw) [-agoqu] [-t target-window] option [value]
show-window-options (showw) [-gv] [-t target-window] [option]
```
```
aggressive-resize off
alternate-screen on
monitor-activity off
monitor-silence 0
synchronize-panes off
wrap-search on
xterm-keys off
remain-on-exit off
mode-keys vi
mode-style fg=black,bg=yellow
allow-rename off
automatic-rename on
automatic-rename-format "#{?pane_in_mode,[tmux],#{pane_current_command}}#{?pane_dead,[dead],}"
pane-base-index 1
force-height 0
force-width 0
main-pane-height 24
main-pane-width 80
other-pane-height 0
other-pane-width 0
clock-mode-style 24
clock-mode-colour blue
pane-border-style default
pane-border-status off
pane-active-border-style fg=green
pane-border-format "#{?pane_active,#[reverse],}#{pane_index}#[default] "#{pane_title}""
window-style default
window-active-style default
window-status-separator " "
window-status-style default
window-status-bell-style reverse
window-status-last-style default
window-status-current-style default
window-status-activity-style reverse
window-status-format "#I:#W#{?window_flags,#{window_flags}, }"
window-status-current-format "#I:#W#{?window_flags,#{window_flags}, }"
```
同时管理多个终端。[tmux源码](https://github.com/tmux/tmux)
### docker使用
- [Windows版docker下载](https://store.docker.com/editions/community/docker-ce-desktop-windows)