怎么在Linux系統(tǒng)中使用zsh提高效率?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)樺甸,10多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):189808205751、主題和插件
多年來(lái),開(kāi)源社區(qū)已經(jīng)為 zsh 開(kāi)發(fā)了數(shù)不清的主題和插件。主題是一個(gè)預(yù)定義提示符的配置,而插件則是一組常用的別名命令和函數(shù),可以讓你更方便的使用一種特定的命令或者編程語(yǔ)言。
如果你現(xiàn)在想開(kāi)始用 zsh 的主題和插件,那么使用一種 zsh 的配置框架是你最快的入門(mén)方式。在眾多的配置框架中,最受歡迎的則是 Oh My Zsh。在默認(rèn)配置中,它就已經(jīng)為 zsh 啟用了一些合理的配置,同時(shí)它也自帶上百個(gè)主題和插件。
主題會(huì)在你的命令行提示符之前添加一些有用的信息,比如你 Git 倉(cāng)庫(kù)的狀態(tài),或者是當(dāng)前使用的 Python 虛擬環(huán)境,所以它會(huì)讓你的工作更高效。只需要看到這些信息,你就不用再敲命令去重新獲取它們,而且這些提示也相當(dāng)酷炫。下圖就是我選用的主題 Powerlevel9k:
除了主題,Oh my Zsh 還自帶了大量常用的 zsh 插件。比如,通過(guò)啟用 Git 插件,你可以用一組簡(jiǎn)便的命令別名操作 Git, 比如
$ alias | grep -i git | sort -R | head -10 g=git ga='git add' gapa='git add --patch' gap='git apply' gdt='git diff-tree --no-commit-id --name-only -r' gau='git add --update' gstp='git stash pop' gbda='git branch --no-color --merged | command grep -vE "^(\*|\s*(master|develop|dev)\s*$)" | command xargs -n 1 git branch -d' gcs='git commit -S' glg='git log --stat'
zsh 還有許多插件可以用于許多編程語(yǔ)言、打包系統(tǒng)和一些平時(shí)在命令行中常用的工具。以下是我 Ferdora 工作站中用到的插件表:
git golang fedora docker oc sudo vi-mode virtualenvwrapper
2、智能的命令別名
命令別名在 zsh 中十分有用。為你常用的命令定義別名可以節(jié)省你的打字時(shí)間。Oh My Zsh 默認(rèn)配置了一些常用的命令別名,包括目錄導(dǎo)航命令別名,為常用的命令添加額外的選項(xiàng),比如:
ls='ls --color=tty' grep='grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}'
除了命令別名以外,zsh 還自帶兩種額外常用的別名類(lèi)型:后綴別名和全局別名。
后綴別名可以讓你基于文件后綴,在命令行中利用指定程序打開(kāi)這個(gè)文件。比如,要用 vim 打開(kāi) YAML 文件,可以定義以下命令行別名:
alias -s {yml,yaml}=vim
現(xiàn)在,如果你在命令行中輸入任何后綴名為 yml 或 yaml 文件,zsh 都會(huì)用 vim 打開(kāi)這個(gè)文件。
$ playbook.yml # Opens file playbook.yml using vim
全局別名可以讓你創(chuàng)建一個(gè)可在命令行的任何地方展開(kāi)的別名,而不僅僅是在命令開(kāi)始的時(shí)候。這個(gè)在你想替換常用文件名或者管道命令的時(shí)候就顯得非常有用了。比如:
alias -g G='| grep -i'
要使用這個(gè)別名,只要你在想用管道命令的時(shí)候輸入 G 就好了:
$ ls -l G do drwxr-xr-x. 5 rgerardi rgerardi 4096 Aug 7 14:08 Documents drwxr-xr-x. 6 rgerardi rgerardi 4096 Aug 24 14:51 Downloads
接著,我們就來(lái)看看zsh 是如何導(dǎo)航文件系統(tǒng)的
3、便捷的目錄導(dǎo)航
當(dāng)你使用命令行的時(shí)候,在不同的目錄之間切換訪問(wèn)是最常見(jiàn)的工作了。 zsh 提供了一些十分有用的目錄導(dǎo)航功能來(lái)簡(jiǎn)化這個(gè)操作。這些功能已經(jīng)集成到 Oh My Zsh 中了, 而你可以用以下命令來(lái)啟用它
setopt autocd autopushd \ pushdignoredups
使用了上面的配置后,你就不用輸入 cd 來(lái)切換目錄了,只需要輸入目錄名稱(chēng),zsh 就會(huì)自動(dòng)切換到這個(gè)目錄中:
$ pwd /home/rgerardi $ /tmp $ pwd /tmp
如果想要回退,只要輸入 -:
zsh 會(huì)記錄你訪問(wèn)過(guò)的目錄,這樣下次你就可以快速切換到這些目錄中。如果想要看這個(gè)目錄列表,只要輸入 dirs -v:
$ dirs -v 0 ~ 1 /var/log 2 /var/opt 3 /usr/bin 4 /usr/local 5 /usr/lib 6 /tmp 7 ~/Projects/Opensource.com/zsh-5tips 8 ~/Projects 9 ~/Projects/ansible 10 ~/Documents
如果想要切換到這個(gè)列表中的其中一個(gè)目錄,只需輸入 ~# (# 代表目錄在列表中的序號(hào))就可以了。比如
$ pwd /home/rgerardi $ ~4 $ pwd /usr/local
你甚至可以用別名組合這些命令,這樣切換起來(lái)就變得更簡(jiǎn)單:
d='dirs -v | head -10' 1='cd -' 2='cd -2' 3='cd -3' 4='cd -4' 5='cd -5' 6='cd -6' 7='cd -7' 8='cd -8' 9='cd -9'
現(xiàn)在你可以通過(guò)輸入 d 來(lái)查看這個(gè)目錄列表的前10個(gè),然后用目錄的序號(hào)來(lái)進(jìn)行切換:
$ d 0 /usr/local 1 ~ 2 /var/log 3 /var/opt 4 /usr/bin 5 /usr/lib 6 /tmp 7 ~/Projects/Opensource.com/zsh-5tips 8 ~/Projects 9 ~/Projects/ansible $ pwd /usr/local $ 6 /tmp $ pwd /tmp
最后,你可以在 zsh 中利用 Tab 來(lái)自動(dòng)補(bǔ)全目錄名稱(chēng)。你可以先輸入目錄的首字母,然后按 TAB 鍵來(lái)補(bǔ)全它們:
$ pwd /home/rgerardi $ p/o/z (TAB) $ Projects/Opensource.com/zsh-5tips/
以上僅僅是 zsh 強(qiáng)大的 Tab 補(bǔ)全系統(tǒng)中的一個(gè)功能。接來(lái)下我們來(lái)探索它更多的功能。
4、先進(jìn)的 Tab 補(bǔ)全
zsh 強(qiáng)大的補(bǔ)全系統(tǒng)是它的賣(mài)點(diǎn)之一。為了簡(jiǎn)便起見(jiàn),我稱(chēng)它為 Tab 補(bǔ)全,然而在系統(tǒng)底層,它起到了幾個(gè)作用。這里通常包括展開(kāi)以及命令補(bǔ)全,我會(huì)在這里用討論它們。如果想了解更多,詳見(jiàn) 用戶(hù)手冊(cè)。
在 Oh My Zsh 中,命令補(bǔ)全是默認(rèn)啟用的。要啟用它,你只要在 .zshrc 文件中添加以下命令:
autoload -U compinit compinit
zsh 的補(bǔ)全系統(tǒng)非常智能。它會(huì)嘗試提示可用在當(dāng)前上下文環(huán)境中的項(xiàng)目 —— 比如,你輸入了 cd 和 TAB,zsh 只會(huì)為你提示目錄名,因?yàn)樗榔渌捻?xiàng)目放在 cd 后面沒(méi)用。
反之,如果你使用與用戶(hù)相關(guān)的命令便會(huì)提示用戶(hù)名,而 ssh 或者 ping 這類(lèi)則會(huì)提示主機(jī)名。
zsh 擁有一個(gè)巨大而又完整的庫(kù),因此它能識(shí)別許多不同的命令。比如,如果你使用 tar 命令, 你可以按 TAB 鍵,它會(huì)為你展示一個(gè)可以用于解壓的文件列表:
$ tar -xzvf test1.tar.gz test1/file1 (TAB) file1 file2
如果使用 git 的話(huà),這里有個(gè)更高級(jí)的示例。在這個(gè)示例中,當(dāng)你按 TAB 鍵, zsh 會(huì)自動(dòng)補(bǔ)全當(dāng)前庫(kù)可以操作的文件:
$ ls original plan.txt zsh-5tips.md zsh_theme_small.png $ git status On branch master Your branch is up to date with 'origin/master'. Changes not staged for commit: (use "git add..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: zsh-5tips.md no changes added to commit (use "git add" and/or "git commit -a") $ git add (TAB) $ git add zsh-5tips.md
zsh 還能識(shí)別命令行選項(xiàng),同時(shí)它只會(huì)提示與選中子命令相關(guān)的命令列表:
$ git commit - (TAB) --all -a -- stage all modified and deleted paths --allow-empty -- allow recording an empty commit --allow-empty-message -- allow recording a commit with an empty message --amend -- amend the tip of the current branch --author -- override the author name used in the commit --branch -- show branch information --cleanup -- specify how the commit message should be cleaned up --date -- override the author date used in the commit --dry-run -- only show the list of paths that are to be committed or not, and any untracked --edit -e -- edit the commit message before committing --file -F -- read commit message from given file --gpg-sign -S -- GPG-sign the commit --include -i -- update the given files and commit the whole index --interactive -- interactively update paths in the index file --message -m -- use the given message as the commit message ... TRUNCATED ...
在按 TAB 鍵之后,你可以使用方向鍵來(lái)選擇你想用的命令?,F(xiàn)在你就不用記住所有的 git 命令項(xiàng)了。
zsh 還有很多有用的功能。當(dāng)你用它的時(shí)候,你就知道哪些對(duì)你才是最有用的。
5、命令行編輯與歷史記錄
zsh 的命令行編輯功能也十分有用。默認(rèn)條件下,它是模擬 emacs 編輯器的。如果你是跟我一樣更喜歡用 vi/vim,你可以用以下命令啟用 vi 的鍵綁定。
$ bindkey -v
如果你使用 Oh My Zsh,vi-mode 插件可以啟用額外的綁定,同時(shí)會(huì)在你的命令提示符上增加 vi 的模式提示 —— 這個(gè)非常有用。
當(dāng)啟用 vi 的綁定后,你可以在命令行中使用 vi 命令進(jìn)行編輯。比如,輸入 ESC+/ 來(lái)查找命令行記錄。在查找的時(shí)候,輸入 n 來(lái)找下一個(gè)匹配行,輸入 N 來(lái)找上一個(gè)。輸入 ESC 后,常用的 vi 命令都可以使用,如輸入 0 跳轉(zhuǎn)到行首,輸入 $ 跳轉(zhuǎn)到行尾,輸入 i 來(lái)插入文本,輸入 a 來(lái)追加文本等等,即使是跟隨的命令也同樣有效,比如輸入 cw 來(lái)修改單詞。
除了命令行編輯,如果你想修改或重新執(zhí)行之前使用過(guò)的命令,zsh 還提供幾個(gè)常用的命令行歷史功能。比如,你打錯(cuò)了一個(gè)命令,輸入 fc,你可以在你偏好的編輯器中修復(fù)最后一條命令。使用哪個(gè)編輯是參照 $EDITOR 變量的,而默認(rèn)是使用 vi。
另外一個(gè)有用的命令是 r, 它會(huì)重新執(zhí)行上一條命令;而 r
最后,輸入兩個(gè)感嘆號(hào)(!!),可以在命令行中回溯最后一條命令。這個(gè)十分有用,比如,當(dāng)你忘記使用 sudo 去執(zhí)行需要權(quán)限的命令時(shí):
$ less /var/log/dnf.log /var/log/dnf.log: Permission denied $ sudo !! $ sudo less /var/log/dnf.log
看完上述內(nèi)容,你們掌握怎么在Linux系統(tǒng)中使用zsh提高效率的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!