在WSL中安装zsh终端

cmder中设置:

新增task,名称为wsl::bash,右下方的方框内填写:

"%ConEmuBaseDirShort%\wsl;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl --distro-guid={f24dabf4-473d-4aa4-92fd-364654228b77} -cur_console:pm:/mnt

这里面的f24dabf4-473d-4aa4-92fd-364654228b77指的是Ubuntu的唯一标识符,如果重装了子系统,那么这个标识符实惠变得。可以在在注册表(regedit)中查找 计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxsswin+R搜索regedit

安装zsh

查看系统中的shell

cat /etc/shells
or 
echo $SHELL

搜索看看仓库里和zsh相关的包有哪些

sudo apt-cache search zsh

看到了包的说明后,我们看看zsh包详细说明

sudo apt-cache show zsh

安装zsh

sudo apt-get install zsh -y

验证下安装是否成功

$ zsh --version
zsh 5.4.2 (x86_64-ubuntu-linux-gnu)

设置默认shell

chsh -s /usr/bin/zsh  
or 
chsh -s $(which zsh)

chsh -s 其实修改的就是/etc/passwd 文件中和我们所登录的用户名相对应的那一行

$ cat /etc/passwd|grep ^qhong
qhong:x:1000:1000:,,,:/home/qhong:/bin/zsh

如果在wsl系统中并不生效,那么我们可以在.bashrc末尾加上shell代码,当你打开bash时候切换到zsh。

bash -c zsh

or

if test -t 1; then
    exec zsh
fi

安装oh-my-zsh

wget https://files-cdn.cnblogs.com/files/hongdada/install.sh -O - | sh

进入~/.oh-my-zsh目录后,看看该目录的结构

qhong@hongda:/$ ls ~/.oh-my-zsh
CODE_OF_CONDUCT.md  LICENSE.txt  cache   lib  oh-my-zsh.sh  templates  tools
CONTRIBUTING.md     README.md    custom  log  plugins       themes

lib 提供了核心功能的脚本库
tools 提供安装、升级等功能的快捷工具
plugins 自带插件的存在放位置
templates 自带模板的存在放位置
themes 自带主题文件的存在放位置
custom 个性化配置目录,自安装的插件和主题可放这里

启用插件

Oh My Zsh 默认自带了一些默认主题,存放在~/.oh-my-zsh/plugins目录中。我们可以查看这些插件

qhong@hongda:/$ ls ~/.oh-my-zsh/plugins
adb                cpanm            git-flow-avh              lighthouse             pyenv          systemadmin
ansible            dash             git-hubflow               lol                    pylint         systemd
ant                debian           git-prompt                macports               python         taskwarrior
apache2-macports   dircycle         git-remote-branch         magic-enter            rails          terminalapp
arcanist           dirhistory       gitfast                   man                    rake           terminitor
archlinux          dirpersist       github                    marked2                rake-fast      terraform
asdf               django           gitignore                 mercurial              rand-quote     textastic
autoenv            dnf              glassfish                 meteor                 rbenv          textmate
autojump           dnote            globalias                 minikube               rbfu           thefuck
autopep8           docker           gnu-utils                 mix                    react-native   themes
aws                docker-compose   go                        mix-fast               rebar          thor
battery            docker-machine   golang                    mosh                   redis-cli      tig
bbedit             doctl            gpg-agent                 mvn                    repo           timer
bgnotify           dotenv           gradle                    mysql-macports         ripgrep        tmux
boot2docker        droplr           grails                    n98-magerun            ros            tmux-cssh
bower              drush            grunt                     nanoc                  rsync          tmuxinator
branch             eecms            gulp                      ng                     ruby           torrent
brew               emacs            hanami                    nmap                   rust           transfer
bundler            ember-cli        helm                      node                   rvm            tugboat
bwana              emoji            heroku                    nomad                  safe-paste     ubuntu
cabal              emoji-clock      history                   npm                    salt           ufw
cake               emotty           history-substring-search  npx                    sbt            urltools
cakephp3           encode64         homestead                 nvm                    scala          vagrant
capistrano         extract          httpie                    nyan                   scd            vagrant-prompt
cargo              fabric           iterm2                    oc                     screen         vault
cask               fancy-ctrl-z     jake-node                 osx                    scw            vi-mode
catimg             fasd             jenv                      otp                    sdk            vim-interaction
celery             fastfile         jhbuild                   pass                   sfdx           virtualenv
chruby             fbterm           jira                      paver                  sfffe          virtualenvwrapper
chucknorris        fd               jruby                     pep8                   shrink-path    vscode
cloudapp           fedora           jsontools                 per-directory-history  singlechar     vundle
cloudfoundry       firewalld        jump                      percol                 spring         wakeonlan
codeclimate        forklift         kate                      perl                   sprunge        wd
coffee             fossil           keychain                  perms                  ssh-agent      web-search
colemak            frontend-search  kitchen                   phing                  stack          wp-cli
colored-man-pages  fzf              knife                     pip                    sublime        xcode
colorize           gas              knife_ssh                 pipenv                 sudo           yarn
command-not-found  gatsby           kops                      pj                     supervisor     yii
common-aliases     gb               kube-ps1                  please                 suse           yii2
compleat           geeknote         kubectl                   pod                    svcat          yum
composer           gem              laravel                   postgres               svn            z
copybuffer         git              laravel4                  pow                    svn-fast-info  zeus
copydir            git-auto-fetch   laravel5                  powder                 swiftpm        zsh-navigation-tools
copyfile           git-extras       last-working-dir          powify                 symfony        zsh_reload
cp                 git-flow         lein                      profiles               symfony2

Oh My Zsh默认是只启用git插件

plugins=(git)

如需启用更多插件,可加入需启用插件的名称。如下

plugins=(git wd web-search history history-substring-search)

安装类似fish shell的插件

自动补全插件

$ git clone https://github.com/zsh-users/zsh-completions ~/.oh-my-zsh/custom/plugins/zsh-completions

自动提示插件

$ git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions

因为箭头不太方便,在.zshrc中自定义补全快捷键为逗号,但是又一次遇到了需要输入逗号的情况,所以,并不太推荐如下修改:

# 补全快捷键重设
# bindkey ',' autosuggest-accept

语法高亮插件

$ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

编辑.zshrc启用插件

ZSH_THEME="ys"
............................
plugins=(git zsh-completions zsh-autosuggestions zsh-syntax-highlighting)

安装incr补全插件

wget http://mimosa-pudica.net/src/incr-0.2.zsh
mkdir ~/.oh-my-zsh/plugins/incr
mv incr-0.2.zsh ~/.oh-my-zsh/plugins/incr
echo 'source ~/.oh-my-zsh/plugins/incr/incr*.zsh' >> ~/.zshrc
source ~/.zshrc

zsh扩展

~/.zshrc中找到plugins关键字,就可以自定义启用的插件了,系统默认加载git

git插件

命令内容可以参考cat ~/.oh-my-zsh/plugins/git/git.plugin.zsh

常用的:

gapa    git add --patch
gc!    git commit -v --amend
gcl    git clone --recursive
gclean    git reset --hard && git clean -dfx
gcm    git checkout master
gcmsg    git commit -m
gco    git checkout
gd    git diff
gdca    git diff --cached
gp    git push
grbc    git rebase --continue
gst    git status
gup    git pull --rebase

完整列表:https://github.com/robbyrussell/oh-my-zsh/wiki/Plugin:git

配置私钥

# ssh key path
export SSH_KEY_PATH="~/.ssh/rsa_id"

也可以不配置环境变量就可以

extract

解压文件用的,所有的压缩文件,都可以直接x filename,不用记忆参数

当然,如果你想要用tar命令,可以使用tar -tab键,zsh会列出参数的含义。

autojump

sudo apt-get install autojump
  • j -stat:可以查看历史路径库

git-open

git-open插件可以在你git项目下打开远程仓库浏览项目。

git clone https://github.com/paulirish/git-open.git $ZSH_CUSTOM/plugins/git-open
 git clone https://github.com/zsh-users/zsh-history-substring-search ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-history-substring-search

异常

$ source ~/.zshrc
[oh-my-zsh] Insecure completion-dependent directories detected:
drwxrwxrwx 1 qhong qhong 512 Jun 28 13:18 /home/qhong/.oh-my-zsh/custom/plugins/zsh-autosuggestions

[oh-my-zsh] For safety, we will not load completions from these directories until
[oh-my-zsh] you fix their permissions and ownership and restart zsh.
[oh-my-zsh] See the above list for directories with group or other writability.

[oh-my-zsh] To fix your permissions you can do so by disabling
[oh-my-zsh] the write permission of "group" and "others" and making sure that the
[oh-my-zsh] owner of these directories is either root or your current user.
[oh-my-zsh] The following command may help:
[oh-my-zsh]     compaudit | xargs chmod g-w,o-w

[oh-my-zsh] If the above didn't help or you want to skip the verification of
[oh-my-zsh] insecure directories you can set the variable ZSH_DISABLE_COMPFIX to
[oh-my-zsh] "true" before oh-my-zsh is sourced in your zshrc file.

要赋予执行权限

chmod 755 home/qhong/.oh-my-zsh/custom/plugins 
chmod 755 home/qhong/.oh-my-zsh/custom/plugins/zsh-autosuggestions

一些小技巧

给history命令增加时间

.zshrc中加入以下行

$ vim ~/.zshrc

# 历史命令日期显示格式
HIST_STAMPS="yyyy-mm-dd"

source ~/.zshrc

如果没用oh my zsh的话可用如下alias

$ alias history='fc -il 1'

更新oh-my-zsh

设置自动更新oh-my-zsh

默认情况下,当oh-my-zsh有更新时,都会给你提示。如果希望让oh-my-zsh自动更新,在~/.zshrc 中添加下面这句

DISABLE_UPDATE_PROMPT=true
or
# 自动更新的时间间隔,单位是天,这里设置 30 天更新一次
export UPDATE_ZSH_DAYS=1

取消自动升级

DISABLE_AUTO_UPDATE=true

要手动更新,可以执行

$ upgrade_oh_my_zsh

卸载oh my zsh

uninstall_oh_my_zsh

使用技巧

  • 连按两次Tab会列出所有的补全列表并直接开始选择,补全项可以使用 ctrl+n/p/f/b上下左右切换
  • 智能跳转,安装了 autojump 之后,zsh 会自动记录你访问过的目录,通过 j 目录名 可以直接进行目录跳转,而且目录名支持模糊匹配和自动补全,例如你访问过 hadoop-1.0.0 目录,输入j hado 即可正确跳转。j --stat 可以看你的历史路径库。
  • 命令选项补全。在zsh中只需要键入 tar - 就会列出所有的选项和帮助说明
  • 在当前目录下输入 .. 或 ... ,或直接输入当前目录名都可以跳转,你甚至不再需要输入 cd 命令了。在你知道路径的情况下,比如 /usr/local/bin 你可以输入 cd /u/l/b 然后按进行补全快速输入
  • 目录浏览和跳转:输入 d,即可列出你在这个会话里访问的目录列表,输入列表前的序号,即可直接跳转。
  • 命令参数补全。键入 kill <tab> 就会列出所有的进程名和对应的进程号
  • 更智能的历史命令。在用或者方向上键查找历史命令时,zsh支持限制查找。比如,输入ls,然后再按方向上键,则只会查找用过的ls命令。而此时使用则会仍然按之前的方式查找,忽略 ls
  • 多个终端会话共享历史记录
  • 通配符搜索:ls -l **/*.sh,可以递归显示当前目录下的 shell 文件,文件少时可以代替 find。使用 **/ 来递归搜索
  • 扩展环境变量,输入环境变量然后按 就可以转换成表达的值
  • 在 .zshrc 中添加 setopt HIST_IGNORE_DUPS 可以消除重复记录,也可以利用sort -t ";" -k 2 -u ~/.zsh_history | sort -o ~/.zsh_history手动清除

安装jdk

1、更新软件包列表:

sudo apt-get update

2、安装openjdk-8-jdk:

sudo apt-get install openjdk-8-jdk

3、查看java版本,看看是否安装成功:

java -version

查看安装路径

$ sudo update-alternatives --config java
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
Nothing to configure.

设置环境变量

#set jdk environment
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH  

安装maven

下载

移动安装包到指定位置

$ sudo mv apache-maven-3.6.1-bin.tar.gz /usr/local/

解压

$ sudo tar -zxvf apache-maven-3.6.1-bin.tar.gz
 
$ sudo rm -rf apache-maven-3.6.1-bin.tar.gz

设置环境变量

export M2_HOME=/usr/local/apache-maven-3.6.1
export PATH=${M2_HOME}/bin:$PATH

查看

$ mvn -v
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T03:00:29+08:00)
Maven home: /usr/local/apache-maven-3.6.1
Java version: 1.8.0_212, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.4.0-18362-microsoft", arch: "amd64", family: "unix"

安装tomcat

下载

移动安装包

$ sudo mv apache-tomcat-8.5.42.tar.gz /usr/local/

解压

$ sudo tar -zxvf apache-tomcat-8.5.42.tar.gz
$ sudo rm -rf apache-tomcat-8.5.42.tar.gz

设置环境变量

export TOMCAT_HOME=/usr/local/apache-tomcat-8.5.42
export PATH=${TOMCAT_HOME}/bin:$PATH

zsh别名

export LC_ALL=en_US.UTF-8  
export LANG=en_US.UTF-8

alias cls='clear'
alias ll='ls -l'
alias la='ls -a'
alias vi='vim'
alias javac="javac -J-Dfile.encoding=utf8"
alias grep="grep --color=auto"
alias -s html=mate   # 在命令行直接输入后缀为 html 的文件名,会在 TextMate 中打开
alias -s rb=mate     # 在命令行直接输入 ruby 文件,会在 TextMate 中打开
alias -s py=vi       # 在命令行直接输入 python 文件,会用 vim 中打开,以下类似
alias -s js=vi
alias -s c=vi
alias -s java=vi
alias -s txt=vi
alias -s gz='tar -xzvf'
alias -s tgz='tar -xzvf'
alias -s zip='unzip'
alias -s bz2='tar -xjvf'
#set jdk environment
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH 

export M2_HOME=/usr/local/apache-maven-3.6.1
export PATH=${M2_HOME}/bin:$PATH

alias mccm=mvn clean compile -Dmaven.test.skip=true 
alias mcpm=mvn clean package -Dmaven.test.skip=true 
alias mcim=mvn clean install -Dmaven.test.skip=true 
alias mccs=mvn clean compile -DskipTests 
alias mcps=mvn clean package -DskipTests 
alias mcis=mvn clean install -DskipTests 

alias mdt=mvn dependency:tree 
alias mdtv=mvn dependency:tree -Dverbose 
alias mdti=mvn dependency:tree -Dincludes=
alias mdte=mvn dependency:tree -Dexcludes=
alias mdtvi=mvn dependency:tree -Dverbose -Dincludes=$*
alias mdtve=mvn dependency:tree -Dverbose -Dexcludes=

alias mdp=mvn dependency:purge-local-repository 
alias mdpi=mvn dependency:purge-local-repository -Dincludes=
alias mdpe=mvn dependency:purge-local-repository -Dexcludes=
alias mdpa=mvn dependency:purge-local-repository -DactTransitively=false 
alias mdpai=mvn dependency:purge-local-repository -DactTransitively=false -Dincludes=
alias mdpae=mvn dependency:purge-local-repository -DactTransitively=false -Dexcludes=
alias mdpr=mvn dependency:purge-local-repository -DreResolve=false 
alias mdpri=mvn dependency:purge-local-repository -DreResolve=false -Dincludes=
alias mdpre=mvn dependency:purge-local-repository -DreResolve=false -Dexcludes=
alias mdpar=mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false 
alias mdparf=mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false --fail-at-end 
alias mdpari=mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false -Dincludes=
alias mdpare=mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false -Dexcludes=

alias mdparm=mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false -DmanualIncludes=

参考:

Windows Subsystem for Linux 环境配置 (最新 1709 版)

WSL+cmder+oh-my-zsh美化win10命令工具(terminal)

zsh+on-my-zsh配置教程指南(程序员必备)【已备份】

robbyrussell / oh-my-zsh

posted @ 2019-06-26 00:51  hongdada  阅读(2398)  评论(1编辑  收藏  举报