在進行高效的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
或者定義一個匿名函數, 別名的另外一種寫法。svn
$: alias af='f(){ alias | grep $@; unset -f f; }; f'
完成編輯後,.zshrc
中增長alias
插件。從新開啓新的SHELL窗口,如今就能夠經過af
別名命令查詢已有的別名了。
$: 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.