自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Zsh 技巧三則

運(yùn)維 系統(tǒng)運(yùn)維
在每個(gè)目錄下,經(jīng)常用到的命令是不一樣的比如在源碼目錄下常用的是 make xxx ,在配置文件目錄下常用的是 vi xxx ……這種情況下,每個(gè)目錄使用獨(dú)立的歷史紀(jì)錄就比較方便(似乎有發(fā)行版中的 bash 默認(rèn)如此設(shè)置)

在每個(gè)目錄下,經(jīng)常用到的命令是不一樣的
比如在源碼目錄下常用的是 make xxx ,在配置文件目錄下常用的是 vi xxx ……
這種情況下,每個(gè)目錄使用獨(dú)立的歷史紀(jì)錄就比較方便(似乎有發(fā)行版中的 bash 默認(rèn)如此設(shè)置)

實(shí)現(xiàn)方式很簡(jiǎn)單:
1. 在 $HOME/.zsh_history 目錄下創(chuàng)建與工作目錄層級(jí)相同的目錄,并在使用該目錄下的 zhistory 作為歷史紀(jì)錄文件
2. 由于切換目錄總是使用 cd 命令,因此在 cd 的時(shí)候重新設(shè)定 $HISTFILE 變量即可 ($HISTFILE 指定 zsh 使用的歷史紀(jì)錄文件)

# 定義函數(shù),替換原來(lái)的 cd
cd() {
builtin cd "$@" # 執(zhí)行原來(lái)的 cd 命令
fc -W # 寫歷史紀(jì)錄文件,默認(rèn)參數(shù)為 $HISTFILE 。初始值為 #2 處的定義;執(zhí)行了 cd 命令后為 #1 處的定義
# 實(shí)際上,你不可能在每個(gè)目錄下都執(zhí)行個(gè)把命令,很多目錄你沒(méi)有去過(guò),只要為你去過(guò)的目錄建立歷史紀(jì)錄就可以了
local HISTDIR="$HOME/.zsh_history$PWD" # 定義歷史紀(jì)錄目錄。每次 cd 后,$PWD 對(duì)應(yīng)與工作目錄層級(jí)相同的目錄
if [ ! -d "$HISTDIR" ] ; then # 如果不存在這個(gè)目錄,則建立一個(gè)
mkdir -p “$HISTDIR”
fi
export HISTFILE=”$HISTDIR/zhistory” #1 定義歷史紀(jì)錄文件
touch $HISTFILE # 先 touch 一下,如果不存在的話就會(huì)新建一個(gè)
# 清空原來(lái)的歷史紀(jì)錄
local ohistsize=$HISTSIZE # 設(shè)定一個(gè)變量臨時(shí)存儲(chǔ)原歷史紀(jì)錄大小
HISTSIZE=0 # 通過(guò)禁用歷史紀(jì)錄清空
HISTSIZE=$ohistsize # 重新設(shè)定歷史紀(jì)錄大小
fc -R #讀歷史紀(jì)錄文件,默認(rèn)參數(shù)為 $HISTFILE 。也就是 #1 處的定義
}
# 啟動(dòng) zsh 的時(shí)候,并沒(méi)有執(zhí)行 cd 命令,因此 $HOME 目錄對(duì)應(yīng)的歷史紀(jì)錄目錄可能不存在,先建立它
mkdir -p $HOME/.zsh_history$PWD
#2 同樣,啟動(dòng) zsh 的時(shí)候, 還沒(méi)有定義 $HOME 目錄對(duì)應(yīng)的 $HISTFILE ,所以先定義它
export HISTFILE=”$HOME/.zsh_history$PWD/zhistory”


這樣翻歷史紀(jì)錄是方便了,但要查看全部的歷史紀(jì)錄可能有點(diǎn)麻煩了

# 使用 setopt EXTENDED_HISTORY 選項(xiàng),為命令添加時(shí)間戳
# 這非常重要,匯總到一起的歷史紀(jì)錄比較混亂,時(shí)間戳是重新排序的依據(jù)

# 定義 allhistory ,將所有的歷史紀(jì)錄匯總到一起
function allhistory { cat $(find $HOME/.zsh_history -name zhistory) }
# 針對(duì)歷史紀(jì)錄的格式進(jìn)行轉(zhuǎn)換
function convhistory {
sort $1 | #排序
uniq | #合并相同行。
#由于時(shí)間戳精確到秒,所以幾乎不可能有相同的紀(jì)錄
#出現(xiàn)相同的紀(jì)錄是因?yàn)?zsh 的處理方式,每次 cd 會(huì)在兩個(gè)紀(jì)錄文件中產(chǎn)生相同的 cd 命令
sed 's/^:\([ 0-9]*\):[0-9]*;\(.*\)/\1::::::\2/’ | #去掉歷史紀(jì)錄中不需要的字段。添加自定義的分隔符,方便下一步處理
awk -F”::::::” ‘{ $1=strftime(”%Y-%m-%d %T”,$1) “|”; print }’ # 將 UNIX 時(shí)間戳轉(zhuǎn)換成可以看懂的格式
}

#使用 histall 命令查看全部歷史紀(jì)錄
function histall { convhistory =(allhistory) |
sed ‘/^.\{20\} *cd/i\\’ } # 在每個(gè) cd 命令前添加空行,判斷工作目錄比較容易
# 可能會(huì)有一點(diǎn)不準(zhǔn)確。因?yàn)閱?dòng)和退出時(shí)不執(zhí)行 cd 命令,沒(méi)有相應(yīng)的紀(jì)錄。尤其是同時(shí)運(yùn)行多個(gè) zsh 的時(shí)候
#使用 hist 查看當(dāng)前目錄歷史紀(jì)錄
function hist { convhistory $HISTFILE }

#全部歷史紀(jì)錄 top20
#統(tǒng)計(jì)單詞出現(xiàn)的次數(shù)
function top20 { allhistory | awk -F’:[ 0-9]*:[0-9]*;’ ‘{ $1=”" ; print }’ |
sed ’s/ /\n/g’ | # 根據(jù)空格拆分單詞,可能不準(zhǔn)確,比如 “\ ” 之類的。但是以這類單詞出現(xiàn)的頻率,應(yīng)該不會(huì)進(jìn)入 top20
# 本著我不會(huì)的就是不需要的原則,不作相應(yīng)的處理了
sed ‘/^$/d’ | sort | uniq -c | sort -nr | head -n 20 }

 

#p#

 切換目錄時(shí)輸入 cd 還是比較麻煩的,下面的腳本實(shí)現(xiàn)在沒(méi)有輸入任何內(nèi)容的情況下按 TAB ,自動(dòng)填入 “cd [TAB]”

user-complete(){
if [[ -n $BUFFER ]] ; then # 如果該行有內(nèi)容
zle expand-or-complete # 執(zhí)行 TAB 原來(lái)的功能
else # 如果沒(méi)有
BUFFER=”cd ” # 填入 cd(空格)
zle end-of-line # 這時(shí)光標(biāo)在行首,移動(dòng)到行末
zle expand-or-complete # 執(zhí)行 TAB 原來(lái)的功能
fi }
zle -N user-complete
bindkey “\t” user-complete #將上面的功能綁定到 TAB 鍵


有時(shí)候輸完了一個(gè)命令,才想起這個(gè)命令需要管理員權(quán)限,這時(shí)最快的步驟為:
Ctrl+a s u d o (空格)[Ctrl+e]
按兩下 ESC 鍵完成上面的過(guò)程:

##在命令前插入 sudo
sudo-command-line() {
[[ -z $BUFFER ]] && zle up-history
[[ $BUFFER != sudo\ * ]] && BUFFER=”sudo $BUFFER”
#光標(biāo)移動(dòng)到行末
zle end-of-line
}
zle -N sudo-command-line
#定義快捷鍵為: [Esc] [Esc]
bindkey “\e\e” sudo-command-line


以下配置文件供參考,可以直接復(fù)制

#命令提示符 {{{
RPROMPT=$(echo '%{33[31m%}%D %T%{33[m%}')
PROMPT=$(echo '%{33[34m%}%M%{33[32m%}%/
%{33[36m%}%n%{33[01;33m%} >>> %{33[m%}')
#}}}

#關(guān)于歷史紀(jì)錄的配置 {{{
#歷史紀(jì)錄條目數(shù)量
export HISTSIZE=10000
#注銷后保存的歷史紀(jì)錄條目數(shù)量
export SAVEHIST=10000
#歷史紀(jì)錄文件
#export HISTFILE=~/.zhistory
#以附加的方式寫入歷史紀(jì)錄
setopt INC_APPEND_HISTORY
#如果連續(xù)輸入的命令相同,歷史紀(jì)錄中只保留一個(gè)
setopt HIST_IGNORE_DUPS
#為歷史紀(jì)錄中的命令添加時(shí)間戳
setopt EXTENDED_HISTORY

#啟用 cd 命令的歷史紀(jì)錄,cd -[TAB]進(jìn)入歷史路徑
setopt AUTO_PUSHD
#相同的歷史路徑只保留一個(gè)
setopt PUSHD_IGNORE_DUPS

#在命令前添加空格,不將此命令添加到紀(jì)錄文件中
#setopt HIST_IGNORE_SPACE
#}}}

#每個(gè)目錄使用獨(dú)立的歷史紀(jì)錄{{{
cd() {
builtin cd “$@” # do actual cd
fc -W # write current history file
local HISTDIR=”$HOME/.zsh_history$PWD” # use nested folders for history
if [ ! -d "$HISTDIR" ] ; then # create folder if needed
mkdir -p “$HISTDIR”
fi
export HISTFILE=”$HISTDIR/zhistory” # set new history file
touch $HISTFILE
local ohistsize=$HISTSIZE
HISTSIZE=0 # Discard previous dir’s history
HISTSIZE=$ohistsize # Prepare for new dir’s history
fc -R #read from current histfile
}
mkdir -p $HOME/.zsh_history$PWD
export HISTFILE=”$HOME/.zsh_history$PWD/zhistory”

function allhistory { cat $(find $HOME/.zsh_history -name zhistory) }
function convhistory {
sort $1 | uniq |
sed ’s/^:\([ 0-9]*\):[0-9]*;\(.*\)/\1::::::\2/’ |
awk -F”::::::” ‘{ $1=strftime(”%Y-%m-%d %T”,$1) “|”; print }’
}
#使用 histall 命令查看全部歷史紀(jì)錄
function histall { convhistory =(allhistory) |
sed ‘/^.\{20\} *cd/i\\’ }
#使用 hist 查看當(dāng)前目錄歷史紀(jì)錄
function hist { convhistory $HISTFILE }

#全部歷史紀(jì)錄 top44
function top44 { allhistory | awk -F’:[ 0-9]*:[0-9]*;’ ‘{ $1=”" ; print }’ | sed ’s/ /\n/g’ | sed ‘/^$/d’ | sort | uniq -c | sort -nr | head -n 44 }

#}}}

#雜項(xiàng) {{{
#允許在交互模式中使用注釋 例如:
#cmd #這是注釋
setopt INTERACTIVE_COMMENTS

#啟用自動(dòng) cd,輸入目錄名回車進(jìn)入目錄
#稍微有點(diǎn)混亂,不如 cd 補(bǔ)全實(shí)用
#setopt AUTO_CD

#禁用 core dumps
limit coredumpsize 0

#Emacs風(fēng)格 鍵綁定
bindkey -e
#設(shè)置 [DEL]鍵 為向后刪除
bindkey “\e[3~" delete-char

#以下字符視為單詞的一部分
WORDCHARS='*?_-[]~=&;!#$%^(){}’
#}}}

#自動(dòng)補(bǔ)全功能 {{{
setopt AUTO_LIST
setopt AUTO_MENU
#開(kāi)啟此選項(xiàng),補(bǔ)全時(shí)會(huì)直接選中菜單項(xiàng)
#setopt MENU_COMPLETE

autoload -U compinit
compinit

#自動(dòng)補(bǔ)全緩存
#zstyle ‘:completion::complete:*’ use-cache on
#zstyle ‘:completion::complete:*’ cache-path .zcache
#zstyle ‘:completion:*:cd:*’ ignore-parents parent pwd

#自動(dòng)補(bǔ)全選項(xiàng)
zstyle ‘:completion:*:match:*’ original only
zstyle ‘:completion::prefix-1:*’ completer _complete
zstyle ‘:completion:predict:*’ completer _complete
zstyle ‘:completion:incremental:*’ completer _complete _correct
zstyle ‘:completion:*’ completer _complete _prefix _correct _prefix _match _approximate

#路徑補(bǔ)全
zstyle ‘:completion:*’ expand ‘yes’
zstyle ‘:completion:*’ squeeze-shlashes ‘yes’
zstyle ‘:completion::complete:*’ ‘\\’

zstyle ‘:completion:*’ menu select
zstyle ‘:completion:*:*:default’ force-list always

#彩色補(bǔ)全菜單
eval $(dircolors -b)
export ZLSCOLORS=”${LS_COLORS}”
zmodload zsh/complist
zstyle ‘:completion:*’ list-colors ${(s.:.)LS_COLORS}
zstyle ‘:completion:*:*:kill:*:processes’ list-colors ‘=(#b) #([0-9]#)*=0=01;31′

#錯(cuò)誤校正
zstyle ‘:completion:*’ completer _complete _match _approximate
zstyle ‘:completion:*:match:*’ original only
zstyle ‘:completion:*:approximate:*’ max-errors 1 numeric

#kill 命令補(bǔ)全
compdef pkill=kill
compdef pkill=killall
zstyle ‘:completion:*:*:kill:*’ menu yes select
zstyle ‘:completion:*:*:*:*:processes’ force-list always
zstyle ‘:completion:*:processes’ command ‘ps -au$USER’

#補(bǔ)全類型提示分組
zstyle ‘:completion:*:matches’ group ‘yes’
zstyle ‘:completion:*’ group-name ”
zstyle ‘:completion:*:options’ description ‘yes’
zstyle ‘:completion:*:options’ auto-description ‘%d’
zstyle ‘:completion:*:descriptions’ format $’\e[01;33m -- %d --\e[0m'
zstyle ':completion:*:messages' format $'\e[01;35m -- %d --\e[0m'
zstyle ':completion:*:warnings' format $'\e[01;31m -- No Matches Found --\e[0m'
#}}}

##行編輯高亮模式 {{{
# Ctrl+@ 設(shè)置標(biāo)記,標(biāo)記和光標(biāo)點(diǎn)之間為 region
zle_highlight=(region:bg=magenta #選中區(qū)域
special:bold #特殊字符
isearch:underline)#搜索時(shí)使用的關(guān)鍵字
#}}}

##空行(光標(biāo)在行首)補(bǔ)全 cd {{{
user-complete(){
if [[ -n $BUFFER ]] ; then
zle expand-or-complete
else
BUFFER=”cd ”
zle end-of-line
zle expand-or-complete
fi }
zle -N user-complete
bindkey “\t” user-complete
#}}}

##在命令前插入 sudo {{{
#定義功能
sudo-command-line() {
[[ -z $BUFFER ]] && zle up-history
[[ $BUFFER != sudo\ * ]] && BUFFER=”sudo $BUFFER”
#光標(biāo)移動(dòng)到行末
zle end-of-line
}
zle -N sudo-command-line
#定義快捷鍵為: [Esc] [Esc]
bindkey “\e\e” sudo-command-line
#}}}

#命令別名 {{{
alias cp=’cp -i’
alias mv=’mv -i’
alias rm=’rm -i’
alias ls=’ls -F –color=auto’
alias ll=’ls -l’
alias grep=’grep –color=auto’
alias ee=’emacsclient -t’

#[Esc][h] man 當(dāng)前命令時(shí),顯示簡(jiǎn)短說(shuō)明
alias run-help >&/dev/null && unalias run-help
autoload run-help

#歷史命令 top10
alias top10=’print -l ${(o)history%% *} | uniq -c | sort -nr | head -n 10′
#}}}

#路徑別名 {{{
#進(jìn)入相應(yīng)的路徑時(shí)只要 cd ~xxx
hash -d WWW=”/home/lighttpd/html”
hash -d ARCH=”/mnt/arch”
hash -d PKG=”/var/cache/pacman/pkg”
hash -d E=”/etc/env.d”
hash -d C=”/etc/conf.d”
hash -d I=”/etc/rc.d”
hash -d X=”/etc/X11″
hash -d BK=”/home/r00t/config_bak”
#}}}

##for Emacs {{{
#在 Emacs終端 中使用 Zsh 的一些設(shè)置 不推薦在 Emacs 中使用它
if [[ "$TERM" == "dumb" ]]; then
setopt No_zle
PROMPT=’%n@%M %/
>>’
alias ls=’ls -F’
fi
#}}}

####{{{
function timeconv { date -d @$1 +”%Y-%m-%d %T” }

zstyle ‘:completion:*:ping:*’ hosts 129.27.2.3 www.tugraz.at \
10.16.17.1{{7..9},}
# }}}

## END OF FILE #################################################################
# vim:filetype=zsh foldmethod=marker autoindent expandtab shiftwidth=4

 

【編輯推薦】

  1. Linux初學(xué)者入門優(yōu)秀教程.pdf
  2. Fedora 10 重新贏回了Linux愛(ài)好者
  3. Linux系統(tǒng)下C程序開(kāi)發(fā)詳解
責(zé)任編輯:張燕妮 來(lái)源: 中國(guó)IT實(shí)驗(yàn)室
相關(guān)推薦

2009-08-21 17:17:10

VMware work

2009-08-17 17:36:57

ASP.NET緩存數(shù)據(jù)

2013-11-01 10:41:52

Windows 8.1應(yīng)用技巧

2009-06-11 10:06:50

NetBeans使用

2009-12-07 16:49:03

RHEL用戶技巧

2019-12-22 23:10:19

LinuxSSH加密

2010-09-02 13:39:51

CSS

2009-07-16 09:07:46

Linux使用技巧Linux入門Linux開(kāi)發(fā)

2009-08-26 14:01:33

C# using用法

2011-05-04 09:56:54

打印機(jī)Word打印

2010-12-29 10:52:13

2011-10-08 17:29:17

掃描儀故障解決

2010-08-30 14:03:59

CSS

2011-05-04 14:00:02

打印機(jī)Word打印

2009-02-22 09:53:32

2011-05-27 10:02:42

Shell

2009-09-29 10:01:59

Eclipse插件安裝

2011-07-13 16:26:30

服務(wù)器

2011-05-20 10:37:04

PHP

2009-08-26 08:40:51

Windows 7窗口切換
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)