在進行高效的SHELL實踐以前,首先配置一下基礎環境,固然首先是須要一臺MacOS電腦。這裏採用: zsh
+ oh-my-zsh
+ zsh-completions
+ zsh-autosuggestions
。具體安裝步驟以下:git
# 切換默認SHELL爲 zsh
$: chsh -s /bin/zsh
# 安裝 oh-my-zsh
$: sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
# 安裝 zsh-completions
$: git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-completions
# 安裝 zsh-autosuggestions
$: git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
複製代碼
安裝完成後,輕鬆敲打幾個命令,該提示的、補全的也都如預期般的展現,的確大大的提高了命令輸入的效率。github
減小輸入的另外一個辦法就是對拼寫複雜的命令設置簡易的別名。alias
別名命令最常規的用法就是,定義別名。固然這是alias
命令的主要功能之一。不過它還具備其它功能,不細看的話很容易被忽略掉。shell
不妨經過tldr
命令查詢看看alias
的功能列表:bash
$: tldr alias
alias
Creates aliases -- words that are replaced by a command string.
Aliases expire with the current shell session, unless they're defined in the shell's configuration file, e.g. `~/.bashrc`.
- List all aliases:
alias
- Create a generic alias:
alias word="command"
- View the command associated to a given alias:
alias word
- Remove an aliased command:
unalias word
- Turn `rm` into an interactive command:
alias rm="rm -i"
- Create `la` as a shortcut for `ls -a`:
alias la="ls -a"
複製代碼
不難看出,alias
命令還有另外檢索的功能,該功能在咱們設置別名時先判斷是否已經存在別名很是有用。session
若是僅僅認爲oh-my-zsh只是提供的個性化的主題腳本框架,真是過小看它了。它一套真正的基於zsh
的腳本框架,其真正的威力還表如今其提供的200多個插件上, 固然這些插件是須要安裝的,在 oh-my-zsh
的插件目錄中僅僅是這些工具的輔助函數或是別名。經過這個插件目錄,咱們能夠發現大量功能強大的工具。固然咱們也能夠將本身經常使用的腳本放進來,做爲獨立的分支維護我的命令。app
一般,oh-my-zsh
都會開啓默認插件git
功能。可是具體git
插件提供了哪些功能則須要經過插件的README文件。打開一看,裏面提供的別名有 141 個之多,這麼多的別名很明顯是沒法記憶的。框架
# 統計一些git的別名總數
$: alias | grep ^g | wc -l
141
複製代碼
若是可以在使用時快速的查詢這些別名,用時查詢,一旦用得多了,也就記住了。先經過別名命令手動查詢:less
$: alias | grep ^g
g=git
ga='git add'
gaa='git add --all'
gap='git apply'
gapa='git add --patch'
gau='git add --update'
gav='git add --verbose'
gb='git branch'
gbD='git branch -D'
...
複製代碼
如今,咱們就能夠經過將這個簡單命令行,寫出本身的腳本,集成的oh-my-zsh
的框架,做爲本身的插件獨立維護。在oh-my-zsh
的插件目錄中,增長一個自定義的插件alias
.提供一個快速查詢現有別名的功能。curl
$: mkdir ~/.oh-my-zsh/plugins/alias
$: cd ~/.oh-my-zsh/plugins/alias
$: cat <<EOF > alias.plugin.zsh
function alias-find(){
alias | grep $1
}
alias af="alias-find "
EOF
複製代碼
完成編輯後,.zshrc
中增長alias
插件。從新開啓新的SHELL窗口,如今就能夠經過af
別名命令查詢已有的別名了。svn
$: af commit
gc='git commit -v'
'gc!'='git commit -v --amend'
gca='git commit -v -a'
'gca!'='git commit -v -a --amend'
gcam='git commit -a -m'
'gcan!'='git commit -v -a --no-edit --amend'
'gcans!'='git commit -v -a -s --no-edit --amend'
gcmsg='git commit -m'
'gcn!'='git commit -v --no-edit --amend'
gcs='git commit -S'
gcsm='git commit -s -m'
gdt='git diff-tree --no-commit-id --name-only -r'
git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'
gsd='git svn dcommit'
gwch='git whatchanged -p --abbrev-commit --pretty=medium'
gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign -m "--wip-- [skip ci]"'
複製代碼
這樣就能夠快速的查詢已有存在commit
內容的別名命令了。
oh-my-zsh
是一個腳本框架,若是使用該框架,儘量最大化的使用到它的功能。我的的alias
插件項目,請參閱:liujianping/oh-my-zsh.