对于需要长期与终端打交道的工程师来说,拥有一款称手的终端管理器是很有必要的,对于 Windows 用户来说,最好的选择是 Xshell,这个大家都没有异议。但对于 MacOS 用户来说,仍然毋庸置疑,iTerm2 就是你要的利器,如果你觉得不是,那是你的问题,不是 iTerm2 的问题。今天我就来告诉你问题出在哪里,我将要向你展示的基本上都是你没见过的配方,擦亮眼睛吧!

本教程总共分为三个部分:第一部分关于 iTerm 自身的设置和优化;第二部分关于连接远程服务器的设置和优化;第三部分关于 zsh 的设置和优化。

今天来讲第一部分。

1. 悬浮窗口

首先我们来解决第一个问题:如何在任何界面呼入呼出 iTerm2 的窗口,并且悬浮在界面的顶部?

相信每个人都会有这样的使用场景:你正在全屏浏览器浏览网页,或者正在全屏编辑器写代码写文章之类的,突然想到了什么,或发现了什么,想快速打开终端,执行一两条命令(诸如打开文件、启动服务等),然后关闭。

对于这种情况,我们的愿景是可以通过快捷键迅速打开终端,然后用同样的快捷键迅速隐藏它,直到我需要时再次来到我面前。至于实现方式,虽繁琐但并不复杂,下面跟着我的步骤走:

创建新的 Profile

首先打开 Preperence → Profiles,新建一个 Profiles,取名 HotKey Window

背景透明与模糊设置

Preperence → Profiles → Window → Window Appearance 进行设置

窗口风格配置

Preperence → Profiles → Window → Settings for New Windows 进行设置

解释一下这几个参数:

  • Full-Width Top of Screen : 这个很好理解,让终端显示在屏幕顶部,并占满整个宽度。
  • Current Spce : 表示只显示在当前的工作空间,举个例子吧,假设你在当前屏幕打开了终端,你切换到下一个屏幕时它就不会跟到下一个屏幕。
  • Screen width Cursor : 这个和上面的参数搭配,用来判定哪个屏幕属于当前的工作空间,表示你的鼠标在哪,哪里就是当前的工作空间。

设置 HotKey

Preperence → Profiles → Keys → HotKey Window 进行设置

选中 A hotkey opens a dedicated window with this profile,表示此 profile 可以通过快捷键快速打开快速关闭。

然后点击 Configure Hotkey Window,设置快捷键。

为了只使用一个键,可以使用功能键作为快捷键,我选择的是 F12

这里需要说明一点,功能键只适用于没有 Touch Bar 的 MacBook,对于新款的带 Touch Bar 的 MacBook,只能使用其他的组合快捷键,比如 Cmd+P 什么的。至于原因嘛,那是因为新款 MacBook 的功能键只能显示在 Touch Bar 上,你只能分别针对应用打开功能键,也就是说,你只有打开这个应用时,才会在 Touch Bar 上显示功能键,可是我们要的是在任何地方通过快捷键呼出终端,我不能先打开终端,再使用功能键打开终端。。。这是个先有鸡还是先有蛋的问题,所以还是选其他快捷键吧。

对于没有 Touch Bar 的 MacBook,我们可以这么设置,首先打开系统偏好设置,选择键盘设置。

选中 将 F1、F2 等键用作标准功能键

这样你就可以通过 F12 来快速打开关闭终端了。

请注意:打开了标准功能键之后,以后再想使用功能键的特殊功能,比如 F11 减小音量、F12 增大音量,必须得和 Fn 键组合使用,例如增大音量就是 Fn+F12

对于新款带 Touch Bar 的 MacBook,可以这么设置,首先打开系统偏好设置,选择键盘设置。

"按下 Fn 键以" 选择 “显示F1、F2等键”:

这样就可以使用 Fn+F12 来快速打开终端。

同时在 快捷键 → 功能键 设置中添加 iTerm 应用,这样打开 iTerm2 窗口时就可以直接使用 F12 键来关闭窗口。

到目前为止,悬浮终端的 Profile 就配置完成了,你可以按下你设置的HotKey来方便快速打开和隐藏命令行。如果你想新建标签页也用这个 Profile,可以将 Hotkey Window 设为默认的 Profile:

下面我们来做一些优化工作。

2. 改变光标形状

Preperence → Profiles → Text 进行设置。

默认光标形状是酱紫的:

更改设置之后光标形状就顺眼多了:

3. 为自己代言

如果你要为自己代言,新建任何一个终端窗口都想打上自己的 Logo,可以在 Preperence → Profiles → General 进行设置。

![](/Users/cnsgyg/Desktop/屏幕快照 2020-03-10 下午2.56.46.png)

这样不管我切换到哪个终端,都可以 fuck cloud native!

4. 自定义标签页标题

Preperence → Profiles → General 进行设置。

取消勾选 Applications in terminal may change the title

Title 选择 Profile Name,取消勾选 Job Name

这样每个标签页的标题都会显示为对应的 Profile Name

5. 自定义配色方案

网上有现成的配色方案,我们可以直接拿来主义,地址在这里:https://iterm2colorschemes.com/

下载压缩包,解压后,打开 iTerm2 的设置:Preperence → Profiles → Colors → Color Presets。点击 import 选择解压好的主题目录下 schemes 目录下的你想要的主题导入。

导入之后,再选择你想要的主题就好了,我当然选的是 Ubuntu 骚紫~~

6. 统一配色

默认情况下标签的颜色是黑的,即使你改了配色也没用:

如果想统一配色,需要稍微调整一下配置,打开 Appearence → General,将 Theme 改为 Minimal

7. 关闭启动界面

如果你不想每次打开 iTerm2 都打开默认的窗口,也就是静默打开程序,可以在 Appearence → General 设置:

勾选 Exclude from Dock and ...,更改设置之后下次你再重新打开 iTerm2 就会变成这个样子:

它再也不会出现在 Dock 中,也不会在启动时给你打开一个默认的窗口,你可以优雅地通过快捷键呼入呼出窗口,完美。

8. 使用 shell integration

iTerm2 可以与 unix shell 集成在一起,在安装了 iTerm2 的 shell 集成工具后,可以在 iTerm2 中看到命令历史、当前工作目录、主机名、上传下载文件等。

可以点击菜单栏 iTerm2 > Install Shell Integration 或者终端输入指令:

# 如果你的默认 shell 是 bash,请将 zsh 换成 bash
$ curl -L https://iterm2.com/misc/install_shell_integration.sh | zsh

该脚本会自动安装当前终端 shell 的对应脚本,并写入到对应的 shell 配置文件中。例如在 zsh shell 中执行完脚本后,.zshrc 中间中写入了下面语句:

$ test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"

在安装完 iTerm2 的 shell integration 后会在终端界面中最左侧多出一个蓝色三角形的标记。如图:

有蓝色三角形的标记说明当前 shell 支持 shell integration。如需关闭标记,可以在 iTerm2 > Preferences > Profiles > (your profile) > Terminal 最下面 > Shell Integration 关闭 Show mark indicators

所有工具:

imgcat filename
Displays the image inline.
imgls
Shows a directory listing with image thumbnails.
it2api
Command-line utility to manipulate iTerm2.
it2attention start|stop|fireworks
Gets your attention.
it2check
Checks if the terminal is iTerm2.
it2copy [filename]
Copies to the pasteboard.
it2dl filename
Downloads the specified file, saving it in your Downloads folder.
it2setcolor ...
Changes individual color settings or loads a color preset.
it2setkeylabel ...
Changes Touch Bar function key labels.
it2ul
Uploads a file.
it2universion
Sets the current unicode version.

例如,可以用 imgcat 直接在终端显示图片:

9. 奇技淫巧

最后介绍一些 iTerm2 的奇技淫巧。

剪贴板历史记录

iTerm2 允许我们快速查看剪贴板内容 只需使用 Command + Shift + h 可以呼出粘贴历史,支持模糊检索。还可以设置将粘贴历史保存在磁盘上(Preferences -> General)

智能选中

在 iTerm2 中,双击选中,三击选中整行,四击智能选中(智能规则可配置),可以识别网址,引号引起的字符串,邮箱地址等。(很多时候双击的选中就已经很智能了)

巧用 Command 键

按住 ⌘ 键:

  • 可以拖拽选中的字符串;
  • 点击 url:调用默认浏览器访问该网址;
  • 点击文件:调用默认程序打开文件;
  • 点击文件夹:在 finder 中打开该文件夹;
  • 同时按住 option 键,可以以矩形选中,类似于 vim 中的 ctrl v 操作。

将文本内容复制到剪切板

$ pbcopy < text.md

在 Finder 中打开当前目录

$ open .

ok,关于 iTerm 自身的设置和优化到这里就结束了,下一篇将会介绍关于连接远程服务器的设置和优化,敬请期待。

微信公众号

扫一扫下面的二维码关注微信公众号,在公众号中回复◉加群◉即可加入我们的云原生交流群,和孙宏亮、张馆长、阳明等大佬一起探讨云原生技术

iTerm2 都不会用,还敢自称老司机?(上)的更多相关文章

  1. 盘点国内程序员不常用的热门iOS第三方库:看完,还敢自称”精通iOS开发”吗?【转载】

    综合github上各个项目的关注度与具体使用情况,涵盖功能,UI,数据库,自动化测试,编程工具等类型,看完,还敢自称”精通iOS开发”吗? https://github.com/syedhali/EZ ...

  2. vscode调试js,安装了nodejs之后还出现无法在Path上找到运行时的node

    vscode 调试js,安装了nodejs之后还出现无法在Path上找到运行时的node. 重启vscode解决

  3. js进阶ajax读取json数据(ajax读取json和读取普通文本,和获取服务器返回数据(链接)都是一样的,在url处放上json文件的地址即可)

    js进阶ajax读取json数据(ajax读取json和读取普通文本,和获取服务器返回数据(链接)都是一样的,在url处放上json文件的地址即可) 一.总结 ajax读取json和读取普通文本,和获 ...

  4. 你连Bug都抓不住,还谈什么参与感?

    林子大了什么鸟都有,APP市场也是这样.举个例子,有段时期图片社交井喷式发展,各类图片社交APP一时充斥着市场.各种或重视图片加工或主打社交元素的APP“来得快去得快”.“你方唱罢我登场”,这些短命A ...

  5. 扩展、接管MVC都不会,还说会Spring Boot?

    持续原创输出,点击上方蓝字关注我 目录 前言 Spring Boot 版本 如何扩展MVC? 如何自定义一个拦截器? 什么都不配置为什么依然能运行MVC相关的功能? 如何全面接管MVC?[不推荐] 为 ...

  6. 扩展、接管MVC都不会,还会用Spring Boot?

    持续原创输出,点击上方蓝字关注我 目录 前言 Spring Boot 版本 如何扩展MVC? 如何自定义一个拦截器? 什么都不配置为什么依然能运行MVC相关的功能? 如何全面接管MVC?[不推荐] 为 ...

  7. 都0202了,还在问Vegas和Pr哪个好?

    自媒体时代,蕴藏着很多机会.许多平凡的人,通过制作视频,收获了掌声.赢得了粉丝,甚至改变了自己的命运. 图1:B站百大UP主颁奖现场   但这条路真的一路畅通吗?其实不然,他们成功的背后,必定有多方面 ...

  8. 什么?都1202年了还不懂k8s和容器的关系?!这份k8s指南快拿走不谢!

    都1202年了,还是有许多人搞不清容器与k8s之间的关系.在开始本篇正文之前,我们先来捋一捋这对"CP"的关系. 你可能已经很熟悉虚拟机了,最常见的莫过于我们拿到macOS却需要用 ...

  9. [CSS七分钟系列]都1902年了,还不知道用margin:auto给flex容器内元素分组?

    最近看到几篇博文讲解margin:auto在flex容器中的使用,可惜的是大多讲解都浮于页面表现,没深究其中的作用机理,本文在此浅薄对其表现机理做简单探讨. 引子 日常业务迭代过程中,flex已经是前 ...

随机推荐

  1. cas sso单点登录 登录过程和登出过程原理说明

    CAS大体原理我就不说了,网上一大把,不过具体交互流程没说清楚,所以有这篇文章,如果有错误,请多多指教 登录过程 用户第一次访问一个CAS 服务的客户web 应用时(访问URL :http://192 ...

  2. Windows可以往外ping,外部却ping不通本机

    网络背景:192.168.1.17.192.168.1.19.192.168.1.20 三台机器都在一个exsi宿主机下网络非常简单 问题描述:17和19都可以ping通20:20却不能ping通17 ...

  3. Python的range(n)的用法

    Python的range(n) 方法就是: API定义: If you do need to iterate(迭代) over a sequence(一系列) of numbers, the buil ...

  4. xml字符串转json字符串

    XML字符串转JSON字符串网上的方法很多,这里主要推荐两种: 1.使用org.json包 jar地址:http://mvnrepository.com/artifact/org.json/json ...

  5. 吴裕雄 python 神经网络——TensorFlow 卷积神经网络水果图片识别

    #-*- coding:utf- -*- import time import keras import skimage import numpy as np import tensorflow as ...

  6. 认识shell

    博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽 认识shell 一.由来 第一个流行的 shell 是由 Steven Bourne 发展出来的,为了纪念他所以就称为 ...

  7. 林轩田机器学习基石笔记4—Feasibility of Learning

    上节课介绍了机器学习可以分为不同的类型.其中,监督式学习中的二元分类和回归分析是最常见的也是最重要的机器学习问题.本节课,我们将介绍机器学习的可行性,讨论问题是否可以使用机器学习来解决. 一.Lear ...

  8. Docker:发布镜像问题denied: requested access to the resource is denied的解决方法

    问题: 发布镜像的时候,按照教程执行的,结果没有成功,搜了下,找到解决方法了,记录一下. denied: requested access to the resource is denied 解决方法 ...

  9. Kinect_V1在Debian testing的配置指北

    在Linux下驱动Kinect V1现在有两种方式,一种是使用OpenNI + SensorKinect + Nite的方案,一种是使用OpenNI2 + libfreenect的方案,第一种我没有尝 ...

  10. RAM子账户登录DMS对库进行管理

    前言:阿里云账户是个权限很大的账户,有时候为了不让更多的人知道,但是又必须让别人管理里面某个模块的功能的时候,RAM子账户就显得很重要,所以设置子账户的权限就很有必要了,下面简单设置两种权限(dms上 ...