Iterm2 Tips - 样式、快捷键、插件等

AI 摘要: ITerm2是一款强大的终端工具,它支持图片查看操作、窗口框选择等功能。安装iterm2 integration插件后,可以在终端中快速查看图片。通过rz命令在远程机器发送文件,使用sz命令接收远程机器发送的文件。在分栏或多个tab情况下,可以使用快捷键切换到特定的tab和栏目。详细的快捷键参考可以在StackoverFlow和其他参考链接中找到。

1. ITerm2 支持图片查看操作

  1. 安装iterm2 integration
  2. ~/.zshrc中,放开以下注释
1
2
# iterm2 shell integration集成(imgcat/imgls..)
test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh"
  1. 直接通过``imgls,imgcat`命令查看图片

2. oh-my-zsh 安装

oh-my-zsh 之前一直在用,安装也较为容易,配合iterm终端+一些字体配置就可作出比较炫酷开发环境;

建议将个人的相关配置信息(命令别名、PATH 路径导出、环境参数设定等)与原有的~/.zshrc分离,通过source ~/.my.sh方式加载,与 zsh 表现样式、插件相关配置分离,更好的管理。

安装地址:https://github.com/robbyrussell/oh-my-zsh

3. iterm2 下 oh-my-zsh 支持 Git CommitID 提示配置

3.1. atime 样式定制 & 效果

  1. 全路径展示
  2. 在 git 仓库内,支持 git 分支提示、git commitID 提示
  3. 支持时间展示
  4. 整体命令行比较简洁

3.2. atime.zsh-theme 样式文件内容

1
2
# 创建一个自定义的theme
vim ~/.oh-my-zsh/themes/atime.zsh-theme

对应内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Git info
local git_info='$(git_prompt_info)'
ZSH_THEME_GIT_PROMPT_PREFIX=" on %{$fg[magenta]%}\uE0A0 "
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}! "
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[green]%}? "
ZSH_THEME_GIT_PROMPT_CLEAN=" "

# Git short sha
local git_sha='$(git_prompt_short_sha)'
ZSH_THEME_GIT_PROMPT_SHA_BEFORE="%{$fg_bold[yellow]%}("
ZSH_THEME_GIT_PROMPT_SHA_AFTER=")%{$reset_color%}"

# return status
#local ret_status="(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"

ZSH_THEME_RUBY_PROMPT_PREFIX="%{$fg_bold[red]%}‹"
ZSH_THEME_RUBY_PROMPT_SUFFIX="›%{$reset_color%}"

PROMPT="
%{$fg_bold[green]%}%~%{$reset_color%}${git_info}${git_sha} %{$fg_bold[red]%}💰 %*%{$reset_color%}
$ "

RPROMPT='$(ruby_prompt_info)'

3.3. 修改 ~/.zshrc 内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 样式选择
ZSH_THEME="atime"
..

# plugins部分需要加上 git、git-prompt
plugins=(
    zsh-completions
    zsh-autosuggestions
    git git-prompt
    colorize  colored-man-pages
    pip python
    brew macos
    history
    golang
    docker docker-compose
    kubectl
    history-substring-search
)

3.4. iterm2 样式、颜色、github 参考

  1. iterm2 颜色选择: https://iterm2colorschemes.com/
  2. 样式借鉴:
    1. https://github.com/iplaces/astro-zsh-theme
    2. 官方内的amuse样式文件
  3. oh-my-zsh 关于 git 提示: https://github.com/ohmyzsh/ohmyzsh/blob/master/lib/git.zsh
  4. oh-my-zsh github: https://github.com/ohmyzsh/ohmyzsh

4. 终端/编辑器环境常用快捷键

BTW,以下快捷键在 Linux 下和 Mac 下的行为有些许差异,在不同终端,比如 xshell 和 iterm2 的某些行为也是不一样,需要注意做适当处理,比如在~/.zshrc或 iterm2 的管理设置中进行相关快捷键的自定义

参考: iterm2-kuai-jie-jian-da-quan: https://cnbin.github.io/blog/2015/06/20/iterm2-kuai-jie-jian-da-quan/

4.1. 光标移动

  • 到行首:ctrl + a
  • 到行尾:ctrl + e
  • 字符前进后退:ctrl + f/b (相当于左右方向键) forward/back
  • 单词前进后退:esc + f/b (需要按 esc,然后再按 forward/back)

4.2. 字符交换

  • 交换光标与光标前的两个字符: ctrl+t,通常与ctrl+f/b配合前进/后退一个字符
  • 交换光标前的两个单词:esc+ t,通常与esc+f/b配合前进/后退一个单词

4.3. 删除/裁剪/粘贴

  • 裁剪字符操作
    • 删除光标之前的字符:ctrl + h(相当于 delete 键)
    • 删除光标之后的字符:ctrl + d
  • 裁剪单词
    • 删除光标之前的一个单词:ctrl + w
    • 删除光标之后的一个单词:esc+d
  • 裁剪更多的字符
    • 删除光标到行尾的字符:ctrl + k
    • 删除光标到行首的字符:ctrl + u (MAC 下为删除整行)
  • 删除整行: ctrl + u
  • 粘贴,复制裁剪的内容:ctrl+y

4.4. 大小写转换

  • 字符转成大写:esc + u
  • 字符转成小写: esc + l

4.5. 历史记录

  • 上一条命令:ctrl + p
  • 搜索命令历史:ctrl + r
  • 历史剪贴板:ctrl+;
  • 剪切板历史:⌘ + shift + h

4.6. 字符拷贝

  • 复制+粘贴:ctrl + shift + v

4.7. 清屏

  • 清屏 1:ctrl + l
  • 下一屏: ⌘ + r

tips: 还可以通过stty -a了解下相关信息,另外在 Linux 和 Mac 下,以及不同终端环境下的快捷可能和上述有一定差异,需要自己尝试

4.8. 复制+粘贴

复制+粘贴:ctrl + shift + v

5. 如何在 zsh 中绑定和 bash 中一致的快捷键

6. 针对第三方

zsh 和 bash 还有一定的差别,还可以在 zsh 中的配置默认快捷绑定,重新绑定 key,不过在iterm2中的优先级会更高!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
 # bindkey
bindkey "^U"    backward-kill-line
bindkey "^u"    backward-kill-line
bindkey "^[l"   down-case-word
bindkey "^[L"   down-case-word

 # alt+<- | alt+->
bindkey "^[f" forward-word
bindkey "^[b" backward-word

 # ctrl+<- | ctrl+->
bindkey "^[[1;5D" backward-word
bindkey "^[[1;5C" forward-word

6.1. 查看组合键

7. MAC 下基于 alt+<-和 alt->光标前后快速移动的效果

参考: alt+left arrowkey参考:https://stackoverflow.com/questions/12382499/looking-for-altleftarrowkey-solution-in-zsh

在 MAC 中的使用 Iterm2,如果不想通过上述通过修改~/.zshrc方式,也可以基于 Iterm 的系统配置修改:

  • 取消系统的服务快捷键(alt+<-和 alt+->,以及 ctrl+<-和 ctrl+->)
  • 设置 Iterm2 加载系统配置:Load Prestent >> Natural Text Editing

8. Mac 的开发环境配置

8.1. Mac Awesome 仓库

Mac Awesome 仓库,包含了各类 Mac 相关软件,和 Awesome 系列仓库有类似的效果

地址: https://github.com/jaywcjlove/awesome-mac#developer-tools`

9. Iterm 下无权限操作

Iterm2下操作dd或者ls查看磁盘内容,提示Operation not permitted

解决方法:通用 > 安全和隐私 > 完全磁盘访问权限,把 iTerm.app 勾选上,重启 iTerm.app 就可以了

10. bash-it: 类似 oh-my-zsh

bash-it 类似于,oh-my-zsh,只是针对 bash 环境,功能包括自动完成,主题,别名,自定义功能等

地址:https://github.com/Bash-it/bash-it

11. Iterm 常用其他插件或配置

11.1. zsh-completions 自动提示

1
2
3
4
5
6
7
8
9
$ brew info zsh-completions
$ brew install zsh-completions

// 配置之前先做dump
rm -f ~/.zcompdump; compinit
chmod go-w '/usr/local/share'

// 配置到.zshrc
fpath=(/usr/local/share/zsh-completions $fpath)

类似的bash shell可以采用bash-completions

11.2. autojump 快速 cd 跳转

autojump 是一种更快捷的文件系统导航方式。它的工作原理是从命令行维护您最常使用的目录的数据库。该 autojump -s 命令显示数据库的当前内容。

每天都在命令行下不断的cd到不同的目录,autojump 做到了一个简单的统计概率,利用j keywords可以基于权重值(反映了您在目录中花费的时间)快速 jump 到指定的目录

参考:https://github.com/wting/autojump/wiki

也可以基于man autojump查看更多

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 安装
$ brew install autojump

// 命令
j  keywords: 跳转到keyworks相关目录
jc keywords: 跳转到当前子目录中包含关键字的目录
jo : 从终端打开,在Finder、Explorer中所在目录
jo keywords: 在Finder、Explorer中打开文件所在目录
jco: 子目录打开在Finder、Explorer中
jco keywords: 子目录中含关键字打开在Finder、Explorer中

// 统计
$ j --stat
10.0:   /tmp
10.0:   /data/docker/services/centos-perf
14.1:   /data/docker
20.0:   /data
22.4:   /Users/Terry/.oh-my-zsh
33.2:   /data/www/tkstorm.com
________________________________________

109:     total weight
6:   number of entries
10.00:   current directory weight

data:    /Users/Terry/Library/autojump/autojump.txt

// j其实是个bash函数调用
$ which j

11.3. rz/sz 上传或下载

https://github.com/lupguo/iterm2-zmodem

  1. Install lrzsz on OSX: brew install lrzsz
  2. Save the iterm2-send-zmodem.sh and iterm2-recv-zmodem.sh scripts in /usr/local/bin/
  3. Set up Triggers (Profiles > YourProfile > Advanced > Triggers) in iTerm 2 like so:
1
2
3
4
5
6
7
8
9
Regular expression: rz waiting to receive.\*\*B0100
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-send-zmodem.sh
Instant: checked

Regular expression: \*\*B00000000000000
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-recv-zmodem.sh
Instant: checked

To send a file to a remote machine:

  1. Type rz on the remote machine
  2. Select the file(s) on the local machine to send
  3. Wait for the coprocess indicator to disappear

The receive a file from a remote machine

  1. Type sz filename1 filename2 … filenameN on the remote machine
  2. Select the folder to receive to on the local machine
  3. Wait for the coprocess indicator to disappear Future plans (patches welcome)
  • Visual progress bar indicator

12. Window 框选择

针对分栏或者多 tab 情况下,可以快速切到特定 tab 和栏目

  • panel 面板
    • cmd+alt+上/下/左/右箭头: 选择对应的 panel
  • tab 栏目
    • shift+cmd+[/]: 选择对应的 tab 栏
    • cmd+1/2/3/4..: 快速选定到 1/2/3/4 tab 栏

13. 其他参考