浏览有关tmux的问题(我通常使用GNU Screen)。我的问题是它们各自的优缺点。特别是我对tmux不太了解。
浏览有关tmux的问题(我通常使用GNU Screen)。我的问题是它们各自的优缺点。特别是我对tmux不太了解。
Answers:
从他们的网站:
- tmux与GNU屏幕有何不同?它还提供什么?
与屏幕相比,tmux具有几个优点:
- 明确定义的客户端-服务器模型:窗口是独立的实体,可以同时连接到多个会话,并可以从多个客户端(终端)查看,也可以在同一tmux服务器中的会话之间自由移动;
- 一个一致的,有据可查的命令界面,具有相同的语法,无论是交互使用,用作键绑定还是从外壳程序使用;
- 可从外壳轻松编写脚本;
- 多个粘贴缓冲区;
- 选择vi或emacs键布局;
- 限制窗口大小的选项;
- 状态行语法更有用,能够显示特定命令输出的第一行;
- 更干净,现代,易于扩展的BSD许可代码库。
仍然有一些功能屏幕包括tmux省略:
- 内置的串行和telnet支持;这很肿,不太可能添加到tmux中;
- 更广泛的平台支持(例如IRIX和HP-UX)以及奇数终端。
<C-Left>
in vim
来解决愚蠢的错误tmux
。
一个区别是当多个终端连接到一个会话时,两者的行为方式不同。
通过屏幕,每个连接的终端的视图都彼此独立。使用tmux,所有连接的终端都可以看到相同的东西。
假设您有两个连接到单个tmux会话的终端。如果您^B在一个终端中键入1,则另一终端也将切换到窗口1。
当您有两个终端连接到一个屏幕会话时,如果您在其中一个终端上键入^A1,则它对另一终端无效。
这是基于我对tmux 1.2的经验;我看到1.3已发布,但我没有在变更日志中注意到有关此行为更改的任何内容。
如果您的原始tmux会话被调用0
(默认设置),则可以执行tmux new-session -t 0
)以启动一个新的独立会话,该会话连接到同一组窗口,然后它们可以拥有自己的视图。
tmux new -t 0
。
与GNU屏幕相比,tmux相当新。优点/缺点是一个棘手的问题,因为两个程序都解决了大约相同的问题。tmux是BSD许可的,而screen是GNU GPL。这对某些人来说很重要。
目前,屏幕(在Linux上)更具代表性,也就是说,与tmux相比,您更有可能在给定的Linux机器上找到它。但是,tmux在基本安装的一部分中包含在OpenBSD中。
这两个程序都允许您做同一件事,尽管事情的状态要复杂得多。两者之间的切换并不是太复杂,因为许多屏幕功能也已进入tmux,尽管如果您是任一方的高级用户,则切换到另一方时可能会发现一些挫败感。
与任何程序一样,它实际上取决于您的需求,并且您更满意。试一试,看看自己玩的不错。
有关tmux的更多信息,请参见https://tmux.github.io/
我使用的最大区别在于,在Gnu Screen中您只能水平分割帧,而在Tmux中,您可以水平分割和垂直分割。这是一个移动的目标,尽管正如我在这里告诉我的那样,垂直分割正在使其进入屏幕。
除此之外,一切都是平坦的。
我以为我只想提一下byobu
可用于屏幕的包装器,它可以使开箱即用的包装变得更好。我不知道这样的东西是否可用于tmux,但是byobu
让我的.screenrc仅有几行。查看有关byobu和屏幕截图的快速文章。byobu的项目页面描述了该名称,该名称源于日语中的装饰性多面板屏风,该屏风可用作折叠式隔断。另外,仅运行它就不会损害您的屏幕设置,因此您可以放心地尝试它。一旦开始会话,byobu
就可以使用随意重新连接到该会话,screen
并且仍然不会丢失由其完成的任何自定义设置byobu
(因此只能将其用于初始调用)。它的两个主要优点是:
我没有使用键盘绑定部分,但是肯定会发现状态栏很有用。
另外,您可能会发现Screen Vs tmux链接很有用。我认为大多数答案已被现有答案提及。
byobu
,但是它就像运行命令并自己找到(菜单驱动)一样简单,因为它不会破坏您现有的屏幕设置。我已将答案设为社区Wiki,请随时对其进行编辑。
Drench提出了一个有趣的观点-将两次连接到同一会话的默认行为在tmux中有所不同。但是,如果您要附加两次并在该会话中拥有独立的窗口视图,请使用以下命令启动tmux:
tmux new-session -t <session name>
这将为您创建一个新会话,并附加现有会话中的窗口。如果您没有为第一个会话命名,则可以使用“ rename-session”添加一个。
tmux是较新的功能。
我发现良好的使用取决于良好的设置。
我使用vi(vim)进行编辑(在轨道上运行红宝石),并做了一些设置以使其正常运行。
这是我的〜/ .tmux.conf文件,其中包含许多有用的设置:
bind r source-file ~/.tmux.conf \; display "Reloaded!" # Reload with ctrl-r
set -g prefix C-a # prefix from ctrl-b to ctrl-a
unbind C-b # allow ctrl-b for other things
set -sg escape-time 1 # quicker responses
bind C-a send-prefix # Pass on ctrl-a for other apps
set -g base-index 1 # Numbering of windows
setw -g pane-base-index 1 # Numbering of Panes
bind \ split-window -h # Split panes horizontal
bind - split-window -v # Split panes vertically
bind h select-pane -L # Switch to Pane Left
bind j select-pane -D # Switch to Pane Down
bind k select-pane -U # Switch to Pane Up
bind l select-pane -R # Switch to Pane Right
bind -r C-h select-window -t :- # Quick Pane Selection
bind -r C-l select-window -t :+ # Quick Pane Selection
bind -r H resize-pane -L 5 # Switch to Pane Left
bind -r J resize-pane -D 5 # Switch to Pane Down
bind -r K resize-pane -U 5 # Switch to Pane Up
bind -r L resize-pane -R 5 # Switch to Pane Right
setw -g mode-mouse off # Mouse Off
set -g mouse-select-pane off # Mouse Off
set -g mouse-resize-pane off # Mouse Off
set -g mouse-select-window off # Mouse Off
setw -g monitor-activity on # Activity Alerts
set -g visual-activity on
set -g status-fg white # Status line Colors
set -g status-bg black
setw -g window-status-fg cyan # Window list color
setw -g window-status-bg default
setw -g window-status-attr dim
setw -g window-status-current-fg white # Active Window Color
setw -g window-status-current-bg red
setw -g window-status-current-attr bright
set -g pane-border-fg green # Pane colors
set -g pane-border-bg black
set -g pane-active-border-fg white
set -g pane-active-border-bg yellow
set -g message-fg white # Command/Message Line.
set -g message-bg black
set -g message-attr bright
set -g status-left-length 40 # Status Line, left side
set -g status-left "#[fg=white]Session: #S #[fg=yellow]#I #[fg=cyan]#P"
set -g status-utf8 on # Status Line, right side
set -g status-right "-------"
set -g status-interval 60 # frequency of status line updates
set -g status-justify centre # center window list
setw -g mode-keys vi # vi keys to move
unbind v # Open panes in same directory as tmux-panes script
unbind n
bind v send-keys " ~/tmux-panes -h" C-m
bind n send-keys " ~/tmux-panes -v" C-m
unbind Up # Maximizing and Minimizing...
bind Up new-window -d -n tmp \; swap-pane -s tmp.1 \; select-window -t tmp
unbind Down
bind Down last-window \; swap-pane -s tmp.1 \; kill-window -t tmp
bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log"
我会随意添加一个区别:
tmux是基于ncurses的,而screen不会绘制其他元素。如果有人使用支持滚动的终端仿真器,则将使用屏幕而不是tmux滚动(至少在默认配置下)。搜索和类似功能也一样。