终极 Shell——ZSH

时间:2023-02-23 11:21:55

Shell是Linux/Unix的一个外壳,你理解成衣服也行。它负责外界与Linux内核的交互,接收用户或其他应用程序的命令,然后把这些命令转化成内核能理解的语言,传给内核,内核是真正干活的,干完之后再把结果返回用户或应用程序。

Linux/Unix提供了很多种Shell,为毛要这么多Shell?难道用来炒着吃么?那我问你,你同类型的衣服怎么有那么多件?花色,质地还不一样。写程序比买衣服复杂多了,而且程序员往往负责把复杂的事情搞简单,简单的事情搞复杂。牛程序员看到不爽的Shell,就会自己重新写一套,慢慢形成了一些标准,常用的Shell有这么几种,sh、bash、csh等,想知道你的系统有几种shell,可以通过以下命令查看:

cat /etc/shells

显示如下:

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

在 Linux 里执行这个命令和 Mac 略有不同,你会发现 Mac 多了一个 zsh,也就是说 OS X 系统预装了个 zsh,这是个神马 Shell 呢?

目前常用的 Linux 系统和 OS X 系统的默认 Shell 都是 bash,但是真正强大的 Shell 是深藏不露的 zsh, 这货绝对是马车中的跑车,跑车中的飞行车,史称『终极 Shell』,但是由于配置过于复杂,所以初期无人问津,很多人跑过来看看 zsh 的配置指南,什么都不说转身就走了。直到有一天,国外有个穷极无聊的程序员开发出了一个能够让你快速上手的zsh项目,叫做「oh my zsh」,Github 网址是:https://github.com/robbyrussell/oh-my-zsh。这玩意就像「X天叫你学会 C++」系列,可以让你神功速成,而且是真的。

好,下面我们看看如何安装、配置和使用 zsh。

安装zsh

如果你用 Mac,就可以直接看下一节
如果你用 Redhat Linux,执行:sudo yum install zsh
如果你用 Ubuntu Linux,执行:sudo apt-get install zsh
如果你用 Windows……去洗洗睡吧。

安装完成后设置当前用户使用 zsh:chsh -s /bin/zsh,根据提示输入当前用户的密码就可以了。

安装oh my zsh

首先安装 Git,安装方式同上,把 zsh 换成 git 即可。

安装「oh my zsh」可以自动安装也可以手动安装。

自动安装:

wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

手动安装:

git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

都不复杂,安装完成之后退出当前会话重新打开一个终端窗口,你就可以见到这个彩色的提示了:

终极 Shell——ZSH


配置

zsh 的配置主要集中在用户当前目录的.zshrc里,用 vim 或你喜欢的其他编辑器打开.zshrc,在最下面会发现这么一行字:

# Customize to your needs…

可以在此处定义自己的环境变量和别名,当然,oh my zsh 在安装时已经自动读取当前的环境变量并进行了设置,你可以继续追加其他环境变量。

接下来进行别名的设置,我自己的部分配置如下:


  1. alias cls='clear'

  2. alias ll='ls -l'

  3. alias la='ls -a'

  4. alias vi='vim'

  5. alias javac="javac -J-Dfile.encoding=utf8"

  6. alias grep="grep --color=auto"

  7. alias -s html=mate   # 在命令行直接输入后缀为 html 的文件名,会在 TextMate 中打开

  8. alias -s rb=mate     # 在命令行直接输入 ruby 文件,会在 TextMate 中打开

  9. alias -s py=vi       # 在命令行直接输入 python 文件,会用 vim 中打开,以下类似

  10. alias -s js=vi

  11. alias -s c=vi

  12. alias -s java=vi

  13. alias -s txt=vi

  14. alias -s gz='tar -xzvf'

  15. alias -s tgz='tar -xzvf'

  16. alias -s zip='unzip'

  17. alias -s bz2='tar -xjvf'

  18. #color{{{

  19. autoload colors

  20. colors
  21. for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do

  22. eval _$color='%{$terminfo[bold]$fg[${(L)color}]%}'

  23. eval $color='%{$fg[${(L)color}]%}'

  24. (( count = $count + 1 ))

  25. done

  26. FINISH="%{$terminfo[sgr0]%}"

  27. #}}}
  28. #命令提示符

  29. RPROMPT=$(echo "$RED%D %T$FINISH")

  30. PROMPT=$(echo "$CYAN%n@$YELLOW%M:$GREEN%/$_YELLOW>$FINISH ")
  31. #PROMPT=$(echo "$BLUE%M$GREEN%/

  32. #$CYAN%n@$BLUE%M:$GREEN%/$_YELLOW>>>$FINISH ")

  33. #标题栏、任务栏样式{{{

  34. case $TERM in (*xterm*|*rxvt*|(dt|k|E)term)

  35. precmd () { print -Pn "\e]0;%n@%M//%/\a" }

  36. preexec () { print -Pn "\e]0;%n@%M//%/\ $1\a" }

  37. ;;

  38. esac

  39. #}}}
  40. #编辑器

  41. export EDITOR=vim

  42. #输入法

  43. export XMODIFIERS="@im=ibus"

  44. export QT_MODULE=ibus

  45. export GTK_MODULE=ibus

  46. #关于历史纪录的配置 {{{

  47. #历史纪录条目数量

  48. export HISTSIZE=10000

  49. #注销后保存的历史纪录条目数量

  50. export SAVEHIST=10000

  51. #历史纪录文件

  52. export HISTFILE=~/.zhistory

  53. #以附加的方式写入历史纪录

  54. setopt INC_APPEND_HISTORY

  55. #如果连续输入的命令相同,历史纪录中只保留一个

  56. setopt HIST_IGNORE_DUPS

  57. #为历史纪录中的命令添加时间戳

  58. setopt EXTENDED_HISTORY
  59. #启用 cd 命令的历史纪录,cd -[TAB]进入历史路径

  60. setopt AUTO_PUSHD

  61. #相同的历史路径只保留一个

  62. setopt PUSHD_IGNORE_DUPS
  63. #在命令前添加空格,不将此命令添加到纪录文件中

  64. #setopt HIST_IGNORE_SPACE

  65. #}}}
  66. #每个目录使用独立的历史纪录{{{

  67. cd() {

  68. builtin cd "$@"                             # do actual cd

  69. fc -W                                       # write current history  file

  70. local HISTDIR="$HOME/.zsh_history$PWD"      # use nested folders for history

  71. if  [ ! -d "$HISTDIR" ] ; then          # create folder if needed

  72. mkdir -p "$HISTDIR"

  73. fi

  74. export HISTFILE="$HISTDIR/zhistory"     # set new history file

  75. touch $HISTFILE

  76. local ohistsize=$HISTSIZE

  77. HISTSIZE=0                              # Discard previous dir's history

  78. HISTSIZE=$ohistsize                     # Prepare for new dir's history

  79. fc -R                                       #read from current histfile

  80. }

  81. mkdir -p $HOME/.zsh_history$PWD

  82. export HISTFILE="$HOME/.zsh_history$PWD/zhistory"
  83. function allhistory { cat $(find $HOME/.zsh_history -name zhistory) }

  84. function convhistory {

  85. sort $1 | uniq |

  86. sed 's/^:[0−9]∗:[0-9]*;.∗/\1::::::\2/' |

  87. awk -F"::::::" '{ $1=strftime("%Y-%m-%d %T",$1) "|"; print }'

  88. }

  89. #使用 histall 命令查看全部历史纪录

  90. function histall { convhistory =(allhistory) |

  91. sed '/^.\{20\} *cd/i\\' }

  92. #使用 hist 查看当前目录历史纪录

  93. function hist { convhistory $HISTFILE }
  94. #全部历史纪录 top50

  95. function top50 { allhistory | awk -F':[ 0-9]*:[0-9]*;' '{ $1="" ; print }' | sed 's/ /\n/g' | sed '/^$/d' | sort | uniq -c | sort -nr | head -n 50 }
  96. #}}}
  97. #杂项 {{{

  98. #允许在交互模式中使用注释  例如:

  99. #cmd #这是注释

  100. setopt INTERACTIVE_COMMENTS
  101. #启用自动 cd,输入目录名回车进入目录

  102. #稍微有点混乱,不如 cd 补全实用

  103. setopt AUTO_CD
  104. #扩展路径

  105. #/v/c/p/p => /var/cache/pacman/pkg

  106. setopt complete_in_word
  107. #禁用 core dumps

  108. limit coredumpsize 0
  109. #Emacs风格 键绑定

  110. bindkey -e

  111. #bindkey -v

  112. #设置 [DEL]键 为向后删除

  113. #bindkey "\e[3~" delete-char
  114. #以下字符视为单词的一部分

  115. WORDCHARS='*?_-[]~=&;!#$%^(){}<>'

  116. #}}}
  117. #自动补全功能 {{{

  118. setopt AUTO_LIST

  119. setopt AUTO_MENU

  120. #开启此选项,补全时会直接选中菜单项

  121. #setopt MENU_COMPLETE
  122. autoload -U compinit

  123. compinit
  124. #自动补全缓存

  125. #zstyle ':completion::complete:*' use-cache on

  126. #zstyle ':completion::complete:*' cache-path .zcache

  127. #zstyle ':completion:*:cd:*' ignore-parents parent pwd
  128. #自动补全选项

  129. zstyle ':completion:*' verbose yes

  130. zstyle ':completion:*' menu select

  131. zstyle ':completion:*:*:default' force-list always

  132. zstyle ':completion:*' select-prompt '%SSelect:  lines: %L  matches: %M  [%p]'
  133. zstyle ':completion:*:match:*' original only

  134. zstyle ':completion::prefix-1:*' completer _complete

  135. zstyle ':completion:predict:*' completer _complete

  136. zstyle ':completion:incremental:*' completer _complete _correct

  137. zstyle ':completion:*' completer _complete _prefix _correct _prefix _match _approximate
  138. #路径补全

  139. zstyle ':completion:*' expand 'yes'

  140. zstyle ':completion:*' squeeze-shlashes 'yes'

  141. zstyle ':completion::complete:*' '\\'
  142. #彩色补全菜单

  143. eval $(dircolors -b)

  144. export ZLSCOLORS="${LS_COLORS}"

  145. zmodload zsh/complist

  146. zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}

  147. zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'
  148. #修正大小写

  149. zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}'

  150. #错误校正

  151. zstyle ':completion:*' completer _complete _match _approximate

  152. zstyle ':completion:*:match:*' original only

  153. zstyle ':completion:*:approximate:*' max-errors 1 numeric
  154. #kill 命令补全

  155. compdef pkill=kill

  156. compdef pkill=killall

  157. zstyle ':completion:*:*:kill:*' menu yes select

  158. zstyle ':completion:*:*:*:*:processes' force-list always

  159. zstyle ':completion:*:processes' command 'ps -au$USER'
  160. #补全类型提示分组

  161. zstyle ':completion:*:matches' group 'yes'

  162. zstyle ':completion:*' group-name ''

  163. zstyle ':completion:*:options' description 'yes'

  164. zstyle ':completion:*:options' auto-description '%d'

  165. zstyle ':completion:*:descriptions' format $'\e[01;33m -- %d --\e[0m'

  166. zstyle ':completion:*:messages' format $'\e[01;35m -- %d --\e[0m'

  167. zstyle ':completion:*:warnings' format $'\e[01;31m -- No Matches Found --\e[0m'

  168. zstyle ':completion:*:corrections' format $'\e[01;32m -- %d (errors: %e) --\e[0m'
  169. # cd ~ 补全顺序

  170. zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand'

  171. #}}}
  172. ##行编辑高亮模式 {{{

  173. # Ctrl+@ 设置标记,标记和光标点之间为 region

  174. zle_highlight=(region:bg=magenta #选中区域

  175. special:bold      #特殊字符

  176. isearch:underline)#搜索时使用的关键字

  177. #}}}
  178. ##空行(光标在行首)补全 "cd " {{{

  179. user-complete(){

  180. case $BUFFER in

  181. "" )                       # 空行填入 "cd "

  182. BUFFER="cd "

  183. zle end-of-line

  184. zle expand-or-complete

  185. ;;

  186. "cd --" )                  # "cd --" 替换为 "cd +"

  187. BUFFER="cd +"

  188. zle end-of-line

  189. zle expand-or-complete

  190. ;;

  191. "cd +-" )                  # "cd +-" 替换为 "cd -"

  192. BUFFER="cd -"

  193. zle end-of-line

  194. zle expand-or-complete

  195. ;;

  196. * )

  197. zle expand-or-complete

  198. ;;

  199. esac

  200. }

  201. zle -N user-complete

  202. bindkey "\t" user-complete

  203. #}}}
  204. ##在命令前插入 sudo {{{

  205. #定义功能

  206. sudo-command-line() {

  207. [[ -z $BUFFER ]] && zle up-history

  208. [[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"

  209. zle end-of-line                 #光标移动到行末

  210. }

  211. zle -N sudo-command-line

  212. #定义快捷键为: [Esc] [Esc]

  213. bindkey "\e\e" sudo-command-line

  214. #}}}
  215. #命令别名 {{{

  216. alias cp='cp -i'

  217. alias mv='mv -i'

  218. alias rm='rm -i'

  219. alias ls='ls -F --color=auto'

  220. alias ll='ls -al'

  221. alias grep='grep --color=auto'

  222. alias la='ls -a'

  223. alias pacman='sudo pacman-color'

  224. alias p='sudo pacman-color'

  225. alias y='yaourt'

  226. alias h='htop'

  227. alias vim='sudo vim'
  228. #[Esc][h] man 当前命令时,显示简短说明

  229. alias run-help >&/dev/null && unalias run-help

  230. autoload run-help
  231. #历史命令 top10

  232. alias top10='print -l  ${(o)history%% *} | uniq -c | sort -nr | head -n 10'

  233. #}}}
  234. #路径别名 {{{

  235. #进入相应的路径时只要 cd ~xxx

  236. hash -d A="/media/ayu/dearest"

  237. hash -d H="/media/data/backup/ayu"

  238. hash -d E="/etc/"

  239. hash -d D="/home/ayumi/Documents"

  240. #}}}
  241. ##for Emacs {{{

  242. #在 Emacs终端 中使用 Zsh 的一些设置 不推荐在 Emacs 中使用它

  243. #if [[ "$TERM" == "dumb" ]]; then

  244. #setopt No_zle

  245. #PROMPT='%n@%M %/

  246. #>>'

  247. #alias ls='ls -F'

  248. #fi

  249. #}}}
  250. #{{{自定义补全

  251. #补全 ping

  252. zstyle ':completion:*:ping:*' hosts 192.168.1.{1,50,51,100,101} www.google.com
  253. #补全 ssh scp sftp 等

  254. #zstyle -e ':completion::*:*:*:hosts' hosts 'reply=(${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) /dev/null)"}%%[# ]*}//,/ })'

  255. #}}}
  256. #{{{ F1 计算器

  257. arith-eval-echo() {

  258. LBUFFER="${LBUFFER}echo \$(( "

  259. RBUFFER=" ))$RBUFFER"

  260. }

  261. zle -N arith-eval-echo

  262. bindkey "^[[11~" arith-eval-echo

  263. #}}}
  264. ####{{{

  265. function timeconv { date -d @$1 +"%Y-%m-%d %T" }
  266. # }}}
  267. zmodload zsh/mathfunc

  268. autoload -U zsh-mime-setup

  269. zsh-mime-setup

  270. setopt EXTENDED_GLOB

  271. #autoload -U promptinit

  272. #promptinit

  273. #prompt redhat
  274. setopt correctall

  275. autoload compinstall
  276. #漂亮又实用的命令高亮界面

  277. setopt extended_glob

  278. TOKENS_FOLLOWED_BY_COMMANDS=('|' '||' ';' '&' '&&' 'sudo' 'do' 'time' 'strace')
  279. recolor-cmd() {

  280. region_highlight=()

  281. colorize=true

  282. start_pos=0

  283. for arg in ${(z)BUFFER}; do

  284. ((start_pos+=${#BUFFER[$start_pos+1,-1]}-${#${BUFFER[$start_pos+1,-1]## #}}))

  285. ((end_pos=$start_pos+${#arg}))

  286. if $colorize; then

  287. colorize=false

  288. res=$(LC_ALL=C builtin type $arg 2>/dev/null)

  289. case $res in

  290. *'reserved word'*)   style="fg=magenta,bold";;

  291. *'alias for'*)       style="fg=cyan,bold";;

  292. *'shell builtin'*)   style="fg=yellow,bold";;

  293. *'shell function'*)  style='fg=green,bold';;

  294. *"$arg is"*)

  295. [[ $arg = 'sudo' ]] && style="fg=red,bold" || style="fg=blue,bold";;

  296. *)                   style='none,bold';;

  297. esac

  298. region_highlight+=("$start_pos $end_pos $style")

  299. fi

  300. [[ ${${TOKENS_FOLLOWED_BY_COMMANDS[(r)${arg//|/\|}]}:+yes} = 'yes' ]] && colorize=true

  301. start_pos=$end_pos

  302. done

  303. }

  304. check-cmd-self-insert() { zle .self-insert && recolor-cmd }

  305. check-cmd-backward-delete-char() { zle .backward-delete-char && recolor-cmd }
  306. zle -N self-insert check-cmd-self-insert

  307. zle -N backward-delete-char check-cmd-backward-delete-char



  1. # man page highlight

  2. export LESS_TERMCAP_mb=$'\E[01;31m'       # begin blinking

  3. export LESS_TERMCAP_md=$'\E[01;38;5;74m'  # begin bold

  4. export LESS_TERMCAP_me=$'\E[0m'           # end mode

  5. export LESS_TERMCAP_se=$'\E[0m'           # end standout-mode

  6. export LESS_TERMCAP_so=$'\E[38;5;246m'    # begin standout-mode - info box

  7. export LESS_TERMCAP_ue=$'\E[0m'           # end underline

  8. export LESS_TERMCAP_us=$'\E[04;38;5;146m' # begin underline





zsh 的牛粪之处在于不仅可以设置通用别名,还能针对文件类型设置对应的打开程序,比如:


alias -s html=mate,意思就是你在命令行输入 hello.html,zsh会为你自动打开 TextMat 并读取
hello.html; alias -s gz='tar -xzvf',表示自动解压后缀为 gz 的压缩包。


总之,只有想不到,木有做不到。


设置完环境变量和别名之后,基本上就可以用了,如果你是个主题控,还可以玩玩 zsh 的主题。在 .zshrc
里找到ZSH_THEME,就可以设置主题了,默认主题是:


ZSH_THEME=”robbyrussell”


oh my zsh
提供了数十种主题,相关文件在~/.oh-my-zsh/themes目录下,你可以随意选择,也可以编辑主题满足自己的变态需求,我采用了默认主题robbyrussell,不过做了一点小小的改动:


PROMPT='%{$fg_bold[red]%}➜ %{$fg_bold[green]%}%p%{$fg[cyan]%}%d %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$reset_color%}>'
#PROMPT='%{$fg_bold[red]%}➜ %{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'

对照原来的版本,我把 c 改为 d,c 表示当前目录,d 表示绝对路径,另外在末尾增加了一个「 >
」,改完之后的效果是这样的:


大家可以尝试进行改造,也算个趣事。


最后我们来说说插件。

插件

oh my zsh
项目提供了完善的插件体系,相关的文件在~/.oh-my-zsh/plugins目录下,默认提供了100多种,大家可以根据自己的实际学习和工作环境采用,想了解每个插件的功能,只要打开相关目录下的
zsh 文件看一下就知道了。插件也是在.zshrc里配置,找到plugins关键字,你就可以加载自己的插件了,系统默认加载 git
,你可以在后面追加内容,如下:


plugins=(git textmate ruby autojump osx mvn gradle)

下面简单介绍几个:


1、git:当你处于一个 git 受控的目录下时,Shell 会明确显示 「git」和 branch,如上图所示,另外对 git
很多命令进行了简化,例如 gco=’git checkout’、gd=’git diff’、gst=’git
status’、g=’git’等等,熟练使用可以大大减少 git
的命令长度,命令内容可以参考~/.oh-my-zsh/plugins/git/git.plugin.zsh


2、textmate:mr可以创建 ruby 的框架项目,tm finename 可以用 textmate
打开指定文件。


3、osx:tab 增强,quick-look filename 可以直接预览文件,man-preview grep 可以生成
grep手册 的pdf 版本等。


4、autojump:zsh 和 autojump 的组合形成了 zsh
下最强悍的插件,今天我们主要说说这货。


首先安装autojump,如果你用 Mac,可以使用 brew 安装:


brew install autojump

如果是 Linux,去下载 autojump 的最新版本,比如:


wget https://github.com/downloads/joelthelion/autojump/autojump_v21.1.2.tar.gz

解压缩后进入目录,执行


./install.sh

最后把以下代码加入.zshrc:


[[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh

至此,安装、配置、插件三位一体,终极 Shell 全面登场。退出终端会话重新登录,开始感受 zsh
的训疾如风!

使用 zsh

1、兼容 bash,原来使用 bash 的兄弟切换过来毫无压力,该咋用咋用。


2、强大的历史纪录功能,输入 grep 然后用上下箭头可以翻阅你执行的所有 grep 命令。


3、智能拼写纠正,输入gtep mactalk * -R,系统会提示:zsh: correct ‘gtep’ to ‘grep’
[nyae]? 比妹纸贴心吧,她们向来都是让你猜的……


4、各种补全:路径补全、命令补全,命令参数补全,插件内容补全等等。触发补全只需要按一下或两下 tab
键,补全项可以使用 ctrl+n/p/f/b上下左右切换。比如你想杀掉 Java 的进程,只需要输入 kill java + tab键,如果只有一个 java
进程,zsh 会自动替换为进程的 pid,如果有多个则会出现选择项供你选择。ssh + 空格 +
两个tab键,zsh会列出所有访问过的主机和用户名进行补全


5、智能跳转,安装了autojump之后,zsh 会自动记录你访问过的目录,通过 j + 目录名
可以直接进行目录跳转,而且目录名支持模糊匹配和自动补全,例如你访问过Hadoop-1.0.0目录,输入j hado 即可正确跳转。j –stat
可以看你的历史路径库。


6、目录浏览和跳转:输入
d,即可列出你在这个会话里访问的目录列表,输入列表前的序号,即可直接跳转。


7、在当前目录下输入 .. 或 … ,或直接输入当前目录名都可以跳转,你甚至不再需要输入 cd
命令了。


8、通配符搜索:ls -l **/*.sh,可以递归显示当前目录下的 shell 文件,文件少时可以代替
find,文件太多就歇菜了。


9、更强的别名:请参考配置一节。


10、插件支持:请参考插件一节。

print?

终极 Shell——ZSH的更多相关文章

  1. 终极 Shell——ZSH

    https://zhuanlan.zhihu.com/p/19556676 在开始今天的 MacTalk 之前,先问两个问题吧: 1.相对于其他系统,Mac 的主要优势是什么?2.你们平时用哪种 Sh ...

  2. 终极shell zsh

    在mac上安装zsh,推荐安装. 参见http://macshuo.com/?p=676. 安装成功提示,看着很帅的样子

  3. 终极 shell zsh

    在mac上安装zsh,推荐安装. 参见http://macshuo.com/?p=676. 安装成功提示,看着很帅的样子

  4. &lbrack;daily&rsqb; 宇宙终极shell之zsh

    序 很久以前,我就知道zsh.后来在并不遥远的好几年前,第一次装arch的时候,默认shell就是zsh.虽然用起来不太习惯,但是仍然蛮好用的. 决定好好的学一下zsh,如果可以就切换过去,毕竟bas ...

  5. 如何安装zsh,终极shell

    1,教程 教程 上知乎直接搜索终极shell也可以,话不多说,直接自己看教程吧 2,总之就是 sudo apt-get install zsh chsh ...修改设置 wget下载oh-my-zsh ...

  6. MAC-Zsh安装与使用——终极Shell

    前言:Zsh可配置性强,用户可以自定义配置,个性化强.Zsh tab补全更强大,该功能可以让我们节约很多时间.Zsh 还有代码高亮功能,使得代码更好看了,显得逼格更高.Zsh 还有很多强大的功能,这里 ...

  7. 【转】终极 Shell

    Post navigation ← PreviousNext → 终极 Shell Posted on 2013 年 7 月 23 日 在开始今天的 MacTalk 之前,先问两个问题吧: 1.相对于 ...

  8. 终极 Shell

    在开始今天的 MacTalk 之前,先问两个问题吧: 1.相对于其他系统,Mac 的主要优势是什么?2.你们平时用哪种 Shell?…… 第一个童靴可以坐下了,Mac 的最大优势是 GUI 和命令行的 ...

  9. 终极Shell - Oh My Zsh

    介绍 zsh: 与 bash 同为 shell 软件,适用于 linux 和 mac,mac 与百度开发机已自带. oh-my-zsh:zsh 的一个开源配置方案,即下即用,免去复杂的配置过程.配置后 ...

随机推荐

  1. SQL语句技巧:查询存在一个表而不在另一个表中的数据记录

    方法一(仅适用单个字段)使用 not in ,容易理解,效率低 select A.ID from A where A.ID not in (select ID from B) 方法二(适用多个字段匹配 ...

  2. spring security 构造函数初始化bean思路

    采用有参数的构造方法来解决注入你要的属性例如:public MyInvocationSecurityMetadataSource(RoleService roleService) { this.rol ...

  3. 笔记:创建Jersey REST 服务,基于Maven

    基于Java SE 形式的REST服务 创建项目 我们首选使用 archetypeGroupId 为 org.glassfish.jersey.archetypes 的原型,archetypeArti ...

  4. Gazebo機器人仿真學習探索筆記(三)機器人模型

    gazebo_models:https://bitbucket.org/osrf/gazebo_models 模型庫下載,可以參考如下命令: ~/Rob_Soft/Gazebo7$ hg clone ...

  5. js中全局变量修改后的值不生效【jsp页面中各个js中内容的加载顺序】

    一个老项目中,一个jsp文件中有很多个js文件, 现在要在页面上的一个地方判断一个状态,因为一直找不到原来是在哪里修改的那个状态,所以决定不找了,而是在比较靠前引入的一个js中定义一个全局变量,然后在 ...

  6. 一个ssm综合小案例-商品订单管理----写在前面

    学习了这么久,一直都是零零散散的,没有把知识串联起来综合运用一番 比如拦截器,全局异常处理,json 交互,RESTful 等,这些常见技术必须要掌握 接下来呢,我就打算通过这么一个综合案例把这段时间 ...

  7. C语言学习常见错误分析

    错误分类     语法错 逻辑错 运行错 0.忘记定义变量: int main() { x=3;y=6;  printf("%d/n",x+y); } 1.C语言的变量一定要先定义 ...

  8. SQL 知识及用法备忘录

    ---查询当前数据库一共有多少张表 ) from sysobjects where xtype='U' ---查询当前数据库有多少张视图 ) from sysobjects where xtype=' ...

  9. 2018 Multi-University Training Contest 1 - B Balanced Sequence (贪心)

    题意:对N个由(,)组成的字符串,求拼接后得到的最大的balance序列的长度.balance序列:空串/ A+B(A,B都是b序列)/ (+A+),A为b序列.此三种情况. 分析:在读入N每个字符串 ...

  10. 远程访问Function时报错Remote table-valued function calls are not allowed&period;

    开始是这样调用的:select * from [LinkedServer].[db name].dbo.[function name](param1, param2) 原因: Only table-v ...