=Start=
缘由:
工欲善其事,必先利其器。在Mac上工作,和终端打交道比较多,出于效率和易用性考虑,使用的是iTerm2+ZSH的组合,能力和颜值都不错。在此基础上再配合一些自己的小技巧,效率又会蹭蹭蹭的提升。如果你也有一颗不断追求效率的内心的话,一起来试试吧。内容不定期更新。
正文:
问题1:如何在退出终端的时候不影响已有用「nohup + &」启动的后台进程?「zsh: you have running jobs.」
解决方案:
$ disown %1 #具体的数值和后台进程号有关 #或 $ nohup ./my_script.sh &! #在以往的'&'后面多加了一个'!' #或 $ nohup ./my_script.sh &| #在以往的'&'后面多加了一个'|' #或 $ setopt NO_HUP $ setopt NO_CHECK_JOBS
参考链接:
- http://unix.stackexchange.com/questions/231316/exiting-terminal-running-nohup-my-script-you-have-running-jobs-ok-to
- http://stackoverflow.com/questions/19302913/exit-zsh-but-leave-running-jobs-open
- http://unix.stackexchange.com/questions/243315/in-zsh-whats-the-difference-between-and
问题2:如何在ZSH中使用和Bash类似的快捷键功能?
将下面3行添加到 ~/.zshrc ,然后就可以在 Mac + iTerm2 + zsh 上使用之前在 Linux + Bash 上的组合快捷键了:
bindkey "[D" backward-word bindkey "[C" forward-word bindkey "≥" insert-last-word
- option + ← #在原生的 iTerm-2 和 oh-my-zsh 上的作用为向终端发送 “[D” 字符,在终端上以单词为单位向左移动
- option + → #在原生的 iTerm-2 和 oh-my-zsh 上的作用为向终端发送 “[C” 字符,在终端上以单词为单位向右移动
- option + . #在原生的 iTerm-2 和 oh-my-zsh 上的作用为向终端发送 “≥” 字符,在终端上快速插入上个命令的最后一个参数
修改完后,如果需要在当前shell中立即生效,需要执行命令:
source ~/.zshrc
参考链接:
- https://coderwall.com/p/a8uxma/zsh-iterm2-osx-shortcuts
- http://stackoverflow.com/questions/12382499/looking-for-altleftarrowkey-solution-in-zsh
- http://superuser.com/questions/449378/how-to-bindkey-altkey-in-osx
- http://stackoverflow.com/questions/8344699/zsh-how-to-repeat-the-last-part-of-a-previous-command
- http://foocoder.com/blog/wo-zai-yong-de-macruan-jian-2.html/
- http://zsh.sourceforge.net/Guide/zshguide.html
问题3:为 ZSH(oh-my-zsh) 添加命令的时间戳
参考解答:
$ vim ~/.oh-my-zsh/lib/history.zsh 将 alias history='fc -l 1' 修改成 alias history='fc -il 1' $ source ~/.zshrc
参考链接:
- https://github.com/robbyrussell/oh-my-zsh/issues/3466
- https://github.com/robbyrussell/oh-my-zsh/blob/master/lib/history.zsh
- https://github.com/mattjj/my-oh-my-zsh/blob/master/history.zsh
- http://zsh.sourceforge.net/Guide/zshguide.html
问题4:为 ZSH(oh-my-zsh) 添加历史命令统计的function
function zsh_stats() { fc -l 1 | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n20 }
参考链接:
- http://blog.tankywoo.com/linux/2013/11/26/linux-history-command.html
- http://unix.stackexchange.com/questions/103398/datetime-stamp-when-running-history-command-in-zsh-shell#comment236081_103407
=END=
《 “Mac上ZSH的使用小技巧” 》 有 13 条评论
https://github.com/Bash-it/bash-it
Bash-it是一个有社区支持的Bash框架(其实就是一堆Bash命令和脚本的集合),从oh-my-zsh获得灵感。
虽然现在在Mac上都用的是zsh+oh-my-zsh的组合,但是到了线上服务器上,还是得习惯于用Bash,一般也用不到上面的Bash-it框架/集合,不过还是可以从该框架/集合中吸收一些比较有用的alias/custom functions/autocompletion,以此来不断补充自己的常用工具集。
为iTerm配置Zmodem文件传输(支持跳板机) #暂未测试
https://livc.io/170
Zsh 开发指南
https://github.com/goreliu/zshguide
https://github.com/goreliu/zshguide/blob/master/00_Zsh-%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97%EF%BC%88%E7%9B%AE%E5%BD%95%EF%BC%89.md
iterm2整合Tmux利器
https://tried.cc/2017/12/18/Iterm2TmuxIntegration/
`
最实用且一定要掌握的快捷键:
Command + T 新建Tab
Command + W 关闭选中panes, tab, window
Command + D 纵向分割选中的pane
Command + Shift + D 横向分割选中的pane
Command + Shift + Enter 最大化选中的pane,隐藏其它panes,再次按下就还原布局。
Command + ; 提示输入过的命令
Command + Shift + H 根据时间弹出历史记录
`
Mac 哪位大哥知道 Mac 终端光标在单词之间移动的快键
https://ruby-china.org/topics/1241
`
Option + 方向键
# 或
ESC + b/f
`
开发工具 OS X 下的 iTerm 2 如何让 cursor 跳字移动?
https://ruby-china.org/topics/6114
https://superuser.com/questions/357355/how-can-i-get-controlleft-arrow-to-go-back-one-word-in-iterm2
Mac下iTerm2光标按照单词快速移动设置
https://blog.csdn.net/skyyws/article/details/78480132
几个定制 iTerm2 的 tip
https://segmentfault.com/a/1190000004122657
item2常用快捷键总结
http://aaronmoment.cn/iterm2/
为什么说 zsh 是 shell 中的极品?
https://www.zhihu.com/question/21418449
http://wulfric.me/2015/08/zsh/
打造Mac OS 最强终端利器 iTerm2
https://www.studytime.xin/article/mac-os-iterm.html
`
1. iTerm2 安装
2. oh-my-zsh
3. 主题选择
– 3.1. 将 zsh的主题更改为 Dracula
4. 修改 iterm 配色为 Dracula
5. 目录和文件名区分设置
6. 快速跳转目录
7. 命令设置别名
8. 左右键跳转
9. iTerm2 快速隐藏和显示
10. 命令自动补齐插件 zsh-autosuggestions
11. 增加指令高亮效果
12. iTerm2 快速隐藏和显示窗体:
13. iTerm2 配置代理
14. 全局环境便利加载
– 14.1. 将bash配置文件~/.bash_profile中的环境变量等配置复制到zsh配置文件~/.zshrc中
– 14.2. 在zsh配置文件~/.zshrc中添加下面这行
15. 快捷命令
`
Enable Timestamp For History Command In Zsh In Linux
https://ostechnix.com/enable-timestamp-for-history-command-in-zsh-in-linux/
`
$ history -i
$ history -f
`
https://unix.stackexchange.com/questions/103398/how-to-view-datetime-stamp-for-history-command-in-zsh-shell
给 macOS 终端的 zsh 命令历史添加执行日期时间显示
`
# 临时查看,可以通过 -E 选项,默认是 European 格式的(dd.mm.yyyy hh:mm),不太符合我们自己的习惯
$ history -E
$ echo $HISTFILE
$ tail $HISTFILE
$ tail ~/.zsh_history
# 可以通过修改 .zshrc 配置文件的方式来做,改动其中的 HIST_STAMPS 变量为合适自己的格式即可
$ vim ~/.zshrc
…
# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# You can set one of the optional three formats:
# “mm/dd/yyyy”|”dd.mm.yyyy”|”yyyy-mm-dd”
# or set a custom format using the strftime function format specifications,
# see ‘man strftime’ for details.
# HIST_STAMPS=”mm/dd/yyyy”
HIST_STAMPS=”%F %T”
…
# 重新加载之后可以立即生效
$ source ~/.zshrc
`
Linux Command History with date and time
https://stackoverflow.com/questions/38526588/linux-command-history-with-date-and-time/63552102#63552102
`
In case you are using zsh you can use for example the -E or -i switch:
$ history -E
If you do a man zshoptions or man zshbuiltins you can find out more information about these switches as well as other info related to history
`
#MySQL-prompt
export MYSQL_PS1=”\u@\h [\d]> ”
mcd() { mkdir -p “$1”; cd “$1”; }
mtoday() { mkdir -p “$HOME/logs/$(date +%Y_%B)/$(date +%Y-%m-%d)”; cd “$HOME/logs/$(date +%Y_%B)/$(date +%Y-%m-%d)”; }
backup() { cp “$1″{,.bak}; }
md5check() { md5sum “$1” | grep “$2”; }
sha1check() { sha1sum “$1” | grep “$2”; }
md5dir() {
if [ -d “$1” ]; then
path=$(readlink -f “$1”)
save_name=$(date +%Y%m%d)$(echo “$path” | tr ‘/’ ‘_’)
find “$path” -type f -print0 | xargs -0 md5sum > “$save_name”.md5
else
echo “‘$1’ is not a directory !!!”
fi
}
#Python3 urldecode/urlencode
alias urldecode=’python3 -c “import sys, urllib.parse; print(urllib.parse.unquote(sys.argv[1]))”‘
alias urlencode=’python3 -c “import sys, urllib.parse; print(urllib.parse.quote(sys.argv[1]))”‘
#rot13 encode
alias rot13=”tr ‘a-zA-Z’ ‘n-za-mN-ZA-M’”
alias genpasswd=”strings /dev/urandom | grep -o ‘[[:alnum:]]’ | head -n 30 | tr -d ‘\n’; echo”
alias genpasswd2=”uuidgen”
手动将macOS上 iTerm2 的终端配色修改为 黑底绿字 的样式(白底黑字的样式太难看了,也看不清楚)
`
入口:菜单栏 -> Profiles -> Open Profiles -> Edit Profiles -> + 一个配置 -> 选择 Colors
Basic Colors:
Foreground – 字体的颜色
Background – 背景的颜色
`
这篇 iTerm2 + Oh My Zsh 教程手把手让你成为这条街最靓的仔
https://segmentfault.com/a/1190000022813972
在修改成了黑底绿字之后,在终端上移动光标的时候可能发现颜色不明显的情况,影响操作,这个时候可以在Colors配置中修改:
Cursor Colors -> Cursor【改成红色看起来效果不错】