Tmux: 打造精致与实用并存的终端

由于最近需要经常 ssh 到远程环境,遂趁此折腾了一番 tmux。毕竟 工欲善其事,必先利其器

以下是我的配置文件地址,并在不断摸索与更新中。特别喜欢 solarized 主题,于是参考它配了状态栏的主题。在后边我会列出一些平时使用的技巧,并且欢迎补充~ 如果能够帮到你的话,希望点一个赞或者star

  • github.com/shfshanyue/…

先放张截图,先睹为快,这是在 Mac 下的截图。

本文链接: shanyue.tech/post/tmux-s…

简介

tmux is a terminal multiplexer

tmux 是一个终端复用器,你可以在一个屏幕上管理多个终端!

就我理解,tmux 有以下三大好处

  1. 分屏 诚然,iterm2 也是可以做到分屏的,但是 iterm2 有一个缺点便是 iterm for Mac。 而且,iterm2 分屏也需要不断地 ssh <server>。导致的后果就是有多个用户连接,使用 ps aux | grep sshd | grep -v grep 查看连接数。
  2. attach attach 可以起到保护现场的作用,不至于因 ssh timeout,而丧失了工作环境。
  3. 可配置化

基础

启动

新建一个 tmux session,不过建议您使用以下 Tips 1 来新建

$ tmux      # 新建一个 tmux session,不过建议您使用以下 Tips 1 来新建。
复制代码

术语

  • server 包含多个 session
  • session 包含多个 window
  • window 类似于 iterm2Tab,包含多个 pane,以下中文会翻译为窗口
  • pane 类似于 iterm2Pane,以下中文会翻译为面板

常见命令

  • bind-key (bind) :绑定快捷键,按 prefix 键与快捷键触发。
  • set-option (set) : 设置选项
  • source-file (source) : 生效当前配置文件
  • new-window : 新建窗口,默认快捷键 prefix c
  • split-window : 分屏

自定义状态栏

喜欢 solarized 主题,但是背景色在终端下不大漂亮,选择了 tomorrow 中的一个背景色替代。

message-command-style

设置状态栏信息的样式,以逗号分隔,可设置前景色 fg,背景色 bg,与文字修饰,如斜体 italics,粗体 bold 等等。如下例

"fg=yellow, bg=#abcdef, underscore"
复制代码

自定义状态栏

可以自定义状态栏的内容,如窗口号,窗口名,host,用电量,时间等等。

  • #{host} tmux 会提供一些关于自身状态的变量,比如 session-namewindow-namehost 等等。比如以 #{host} 这种形式来代替 host#{window-name} 代替 window-name
  • #(uptime) 除了在状态栏中 tmux 相关信息,有时还需要取到系统相关信息,如开机时间,当前用户。这些系统命令可以表示为 #(uptime)
set -g message-style "bg=#00346e, fg=#ffffd7"        # tomorrow night blue, base3set -g status-style "bg=#00346e, fg=#ffffd7"   # tomorrow night blue, base3
set -g status-left "#[bg=#0087ff] ❐ #S "       # blue
set -g status-left-length 400
set -g status-right "#{?client_prefix, ~ , } #[bg=#0087ff] #h #[bg=red] %Y-%m-%d %H:%M "
set -g status-right-length 600set -wg window-status-format " #I #W "
set -wg window-status-current-format " #I #W "
set -wg window-status-separator ""
set -wg window-status-current-style "bg=red" # red
set -wg window-status-last-style "fg=red"
复制代码

Tmux Tricks

保持 ssh 连接

每次新建 session 的时候带上名字,方便下次 attach 。稍微提一个命令 detach,默认快捷键 prefix d,会先 detach 掉当前 session

$ tmux new -s shanyue
$ tmux detach
$ tmux attach -t shanyue
复制代码

快速移动面板

移动面板命令为 select-pane,可配置为 vim 式的移动命令。

bind -r h select-pane -L 
bind -r l select-pane -R
bind -r j select-pane -D
bind -r k select-pane -U
复制代码

其中,参数 -r 代表可重复按键,比如 prefix r r 表示 prefix r, prefix r。其中按键时间需要通过 repeat-time 来设置,一般为500ms。

另外,也可以开启鼠标支持,通过鼠标快速移动面板。

向终端发送 prefix key

我习惯 Crtl-s 来作为前缀键,send-prefix 为向终端发送前缀键的命令。

set -g prefix2 C-s                                                             
bind C-s send-prefix -2
复制代码

重命名窗口名

rename-window 为重命名窗口名的命令,默认快捷键 prefix ,

但是有一个小问题,每当重命名窗口名后,敲几个空格又会自动重命名,自己的辛勤工作又被破坏了...

需要配置以下两个配置把它俩给关了,终于可以重命名了

set -wg allow-rename off                                                            
set -wg automatic-rename off
复制代码

配置编辑和重启快捷键

把打开和重启配置文件设为快捷键可以快速提高配置效率。设置 prefix r 重启并更新配置,便于调试配置文件。prefix e 打开配置文件。

source ~/.tmux.conf 使配置文件生效,即重启配置。 new-window -n <window-name> command 新建窗口,并设置窗口名,-n 代表新建的窗口名

bind r source ~/.tmux.conf\; display "tmux config sourced"
bind e neww -n tmux-config "\${EDITOR:-vim} ~/.tmux.conf
复制代码

开启鼠标支持

$ tmux set -g mouse on

鼠标支持默认是关闭的,开启鼠标后,支持复制,翻屏,切换面板,切换窗口,resize。

鼠标支持的功能很强大,至此已经成功打造了一个 iterm2 了。不过鼠标模式我不大喜欢,所以还是禁了。

何况,开启鼠标支持后,谁都可以操作我的终端了,一点逼格也没有了

保持当前路径

新开 panewindow 时,保持当前路径。为以前的命令添加参数 -c,表明新建窗口或者面板的路径。

新开面板的命令为 split-window

bind c new-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
复制代码

最大化当前面板

命令为 tmux resize-pane -Z,默认快捷键为 prefix z。需要查看更加详细的信息时可以按 prefix z 进入全屏,完毕之后,再按一次恢复。相当酷的一个功能。

翻屏

第一次使用 tmux 时, 使用webpack,输出信息很多,而有用的错误信息被覆盖。此时,往上翻屏就很重要了。此时要说下 tmux window 下的两种模式,

  • default-mode

    就是刚进入 tmux 默认的模式。

  • copy-mode:

    prefix [ 键进入此模式,类似于 vi(emacs)normal mode,支持复制,粘贴,查找,以及翻页。具体是 vi 还是 emacs 可以根据以下命令探知,表明查看全局窗口设置 mode-keys,默认会是 vi,如果不是,那就请设置为 vi 吧~

    $ tmux show-window-options -g mode-keys
    复制代码

    vi 命令相同,如上下翻页(半屏)可使用 C-d 以及 C-u,当然你也可以使用 hjkl

另外,也可以开启鼠标支持,使用滚轮来翻屏。

复制与粘贴

上边说到 copy-mode,接下来是复制与粘贴。进入 copy-mode 后,v 开始选中,y 来进行复制并会退出 copy-mode。使用 prefix ] 来进行粘贴。

v & y 为自定义配置,配置如下

bind -t vi-copy v begin-selection
bind -t vi-copy y copy-selection
复制代码

复制操作会把内容存进 buffer 里,熟悉以下几个命令能够更熟练地操作 buffer

$ tmux list-buffers          # 列出所有
$ tmux show-buffer -b [name] # 显示最近 buffer,也可指定 buffer name
$ tmux choose-buffer&emsp;&emsp;    &emsp;# 进入选择 buffer 界面,更加灵活
复制代码

另外,也可以开启鼠标支持,用鼠标来选择文字。

查找关键字

既然进入 copy-mode,熟悉 vi 的朋友一定知道查找是 /?

快速定位窗口

假设你新建了多个窗口,需要快速定位到某一个窗口,而你虽知道那个窗口中的内容,却忘了窗口号,这样如何解决呢?

有一个很好的解决方案的命令便是 find-window,更好用的便是默认的快捷键 prefix f。输入窗口内容的关键字,便可以快速定位到窗口,不过有一个小小的缺点,便是不能定位到面板!

Last but not least

man tmux ! **不看文档不足以熟练,不看源码不足以精通。**所以,平常需要多看几眼文档,多瞧几个命令。

扩展

  • practical-tmux
  • gpakosz/.tmux (stars 1569)
  • tmux-resurrect 保护和恢复工作状态

转载于:https://juejin.im/post/5d33d45b5188254d3c5e59f0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8、路由 router

路由:router 用户功能 /user ----> index.html /user/login ----> login.html /user/reg ----> reg.html /user userRouter > express.Router(); app.use("/user",userRouter); 新闻功能 /news ----> index.html /news/edit ----> edit.ht…

服务器装虚拟化平台,vmware服务器虚拟化方案(vmware虚拟化平台部署)

服务器虚拟化平台方案主要的有三种&#xff0c;特点分别如下&#xff1a;1、思杰Citrix XenServer :XenCenter是Citrix的虚拟化图形接口管理工具&#xff0c;可在同一界面&#xff0c;管理多台的XenServer服务。以前见过一台服务器安装虚拟服务器&#xff0c;然后可以装N个系统…

一个逐步“优化”的范例程序(转)

reference URL&#xff1a;http://www.tracefact.net/Software-Design/A-Sample-Design.aspx本文是《Object-Oriented Analysis and Design》一书第一章和第五章的读书笔记。我对书中提供的一个范例程序进行了总结和整理&#xff0c;通过逐步优化这个乐器管理的范例程序&#x…

Java SE 8新特性导览:使用Lambda Expression进行函数式编程

“ Java SE 8新功能浏览 ”系列的这篇文章将深入了解Lambda表达式 。 我将向您展示Lambda表达式的几种不同用法。 它们都具有功能接口的共同实现。 我将解释编译器如何从代码中推断信息&#xff0c;例如特定类型的变量以及后台实际发生的情况。 在上一篇文章“ Java SE 8新功能…

JS 数据转换

转换成字符串类型 toString() var num 5;console.log(num.toString()); String() String()函数存在的意义&#xff1a;有些值没有toString()&#xff0c;这个时候可以使用String()。比如&#xff1a;undefined和null 拼接字符串方式 num ""&#xff0c;当 两边一…

凭借K2 SmartObject框架,在SharePoint中集成数据

随着SharePoint 2013的发布&#xff0c;Microsoft已提供Business Connectivity Services&#xff08;BCS&#xff09;增强功能以及外部列表功能&#xff0c;确保您可以更简单地在SharePoint环境下从外部数据源提取数据。针对诸如服务台票务应用或销售仪表盘等实施解决方案&…

浙大计算机专硕培养方案,浙江大学硕士研究生培养方案

《浙江大学硕士研究生培养方案》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《浙江大学硕士研究生培养方案(3页珍藏版)》请在人人文库网上搜索。1、浙江大学硕士研究生培养方案医 学院 肿瘤学 专业(代码&#xff1a; 100214 )(一级学科&#xff1a; 临床医学 )一、培…

停止尝试使用内部DB框架模拟SQL OFFSET分页!

我敢肯定&#xff0c;到目前为止&#xff0c;您已经以多种方式弄错了。 而且您可能很快将无法正确处理。 那么&#xff0c;当您可以实施业务逻辑时&#xff0c;为什么还要在SQL调整上浪费您的宝贵时间呢&#xff1f; 让我解释… 直到最近的SQL&#xff1a;2008标准 &#xff0…

leetcode 20. Valid Parentheses 、32. Longest Valid Parentheses 、301. Remove Invalid Parentheses

20. Valid Parentheses 错误解法&#xff1a; "[])"就会报错&#xff0c;没考虑到出现)、]、}时&#xff0c;stack为空的情况&#xff0c;这种情况也无法匹配 class Solution { public:bool isValid(string s) {if(s.empty())return false;stack<char> st;st.…

和朱晔一起复习Java并发(五):并发容器和同步器

和朱晔一起复习Java并发&#xff08;五&#xff09;&#xff1a;并发容器和同步器 本节我们先会来复习一下java.util.concurrent下面的一些并发容器&#xff0c;然后再会来简单看一下各种同步器。 ConcurrentHashMap和ConcurrentSkipListMap的性能 首先&#xff0c;我们来测试一…

树莓派3显示服务器SSH拒绝了密码,脚本封杀尝试树莓派SSH密码的来源IP

树莓派整天开着&#xff0c;如果用缺省SSH端口对外开放&#xff0c;就会经常遇到扫描SSH密码的肉鸡。虽然密码不是很简单&#xff0c;但还是感觉很不安全的。系统的ssh登录日志文件在&#xff1a;/var/log/auth.log&#xff0c;登录失败时会记录以下格式的日志&#xff1a;Mar …

6-1 数组函数练习

1、引用 /* var num 10;function show(num){num ;alert(num);}alert(num); //10show(num); //11 num numalert(num); //10*//*引用*//*var arr [1, 2, 3, 4];function show(arr){arr.push("hello");alert(arr);}alert(arr); //[1, 2, 3, 4]show(arr)…

整理任务

昨晚帮师姐整理测试&#xff0c;没有时间写日志&#xff0c;今天一大早补上。 十一长假之后的第一个工作日&#xff0c;老师回来了。详细汇报了整个假期的学习之后&#xff0c;老师整理了以后我的学习任务。本来觉得没多少事情&#xff0c;可是细数了一下&#xff0c;竟然光论文…

Hive:使用Apache Hive查询客户最喜欢的搜索查询和产品视图计数

这篇文章涵盖了使用Apache Hive查询存储在Hadoop下的搜索点击数据。 我们将以示例的方式生成有关总产品浏览量的客户排名靠前的搜索查询和统计信息。 继续之前的文章 使用大数据分析客户产品搜索点击次数 &#xff0c; Flume&#xff1a;使用Apache Flume收集客户产品搜索点…

expdp错误案例

转自:https://www.cnblogs.com/kerrycode/p/3960328.html Oracle数据泵(Data Dump)使用过程当中经常会遇到一些奇奇怪怪的错误案例&#xff0c;下面总结一些自己使用数据泵(Data Dump)过程当中遇到的问题以及解决方法。都是在使用过程中遇到的问题&#xff0c;以后陆续遇到数据…

HashSet源码分析:JDK源码系列

1.简介 继续分析源码&#xff0c;上一篇文章把HashMap的分析完毕。本文开始分析HashSet简单的介绍一下。 HashSet是一个无重复元素集合&#xff0c;内部使用HashMap实现&#xff0c;所以HashMap的特征耶继承了下来。存储的元素是无序的并且HashSet允许使用空的元素。 HashSet是…

修改左侧导航显示样式(转载自Sunmoonfire's artistic matrix)

这是一片非常好的文章&#xff0c;修改下CSS就可以改变左侧导航栏的样式&#xff0c;在网上找了一些都是要写代码的。怕连接失效&#xff0c;所以直接将文章考了过来&#xff0c;希望作者原谅&#xff0c;如有不妥&#xff0c;请通知一声&#xff0c;我会将文章删掉&#xff01…

tf.argmax()以及axis

tf.argmax()表示返回最大值的索引号&#xff0c;axis为0 &#xff0c;表示返回每列最大值索引号。axis为1 &#xff0c;表示返回每行最大值索引号 结果为 转载于:https://www.cnblogs.com/san333/p/10507402.html

jquery ajax 上传文件 demo,Jquery+AJAX上传文件,无刷新上传并重命名文件

index.htmlAjax上传图片Ajax上传图片function upload(){var form new FormData(document.getElementById("form"));$.ajax({url:"upload.php",type:"post",data:form,cache: false,processData: false,contentType: false,success:function(dat…

Meet Fabric8:基于Camel和ActiveMQ的开源集成平台

面料8 Fabric8是Red Hat的JBoss Fuse产品的Apache 2.0许可上游社区。 这是一个基于Apache ActiveMQ &#xff0c; Camel &#xff0c; CXF &#xff0c; Karaf &#xff0c; HawtIO等的集成平台。 它提供了自动化的配置和部署管理&#xff0c;以帮助使部署变得容易&#xff0…