win10下wsl2(Ubuntu)搭建及docker安装、zsh&&cmder终端美化

1.前提条件

  • Windows 10 Build 18917或更新版本。
  • Hyper-V虚拟化。注:有些电脑需要进BIOS开启虚拟化,我公司的电脑就是。

2. 步骤

  • 启用虚拟机平台和 Linux 子系统功能
    使用管理员权限打开Windows PowerShell
    执行以下命令启用虚拟机平台:
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

根据提示确认是否需要重启,RestartNeeded : true 则重启。
还是在Windows PowerShell
执行以下命令启用子系统:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  • 安装发行版。
    打开微软应用商店,搜索Ubuntu安装即可。
    Ubuntu应用安装后启动才会进行子系统安装。
  • 启用 WSL2
    查看安装的wsl
wsl -l -v

设置 Linux 发行版的 WSL 版本

wsl --set-version Ubuntu  2

转换完成后可以再执行wsl -l -v看看效果:

image.png

当然,使用以下命令可以在以后安装 Linux 的时候默认启用 WSL2:

wsl --set-default-version 2

设置Ubuntu默认用户为root

ubuntu config --default-user root

详细步骤请转https://blog.walterlv.com/post/how-to-install-wsl2.html

2.安装docker

切换到root用户,执行以下4条命令即可。

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo service docker start
sudo usermod -aG docker $USER

安装比较久,耐心一点。

3.美化终端

  • 安装zsh
    两个命令
sudo apt-get install zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

在.bash_profile中启用zsh,编辑文件,在末尾添加:

exec zsh
source .zshrc

进入~/ .zshrc修改主题为```ys``

ZSH_THEME="ys" 
  • 下载cmder

将下载好的cmder_mini.zip文件放到D盘并解压,然后记住文件所在的位置,我的文件解压到D:\Program Files\cmder_mini,然后复制路径,右键点击我的电脑--属性--高级系统设置--环境变量--系统变量,点击新建,变量名设置为:CMDER_HOME,变量值直接粘贴刚才拷贝的地址,然后点击系统变量中的path,点击新建,输入%CMDER_HOME%,至此,环境变量配置完成,一路点击确定关闭即可。

第二步添加 cmder 到右键菜单:环境变量添加后,在任意文件夹中即可打开Cmder,上一步的把 Cmder 加到环境变量就是为此服务的, win10系统下右键点击开始(屏幕左下角的图标“田”),选择Windows PowerShell(管理员),在管理员权限的终端输入以下语句即可:

cmder.exe /REGISTER ALL

可以参考https://www.zhihu.com/collection/233457118
不给里面的cmder配置有问题,启动可以配置这个地址:

%windir%\system32\bash.exe ~ -c zsh -cur_console:p
image.png

可以自己设置下背景和透明度。
好了,不bb了,直接看效果:


image.png

4. vim配置

我的配置首先要安装plug和ctags

curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
sudo apt-get install ctags

以上命令执行成功后先安装vim插件,vim ~/.vimrc,然后配置

call plug#begin('~/.vim/plugged')
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'ludovicchabant/vim-gutentags'
call plug#end()

保存退出,然后vim,执行
:source ~/.vimrc #让配置生效
:PlugInstall # 安装插件
安装完毕就在~/.vimrc直接贴上以下配置:

"使用此配置文件请先用以下命令安装插件管理工具plug和ctags
"curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
"sudo apt-get install ctags
"plug插件安装
call plug#begin('~/.vim/plugged')
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'ludovicchabant/vim-gutentags'
call plug#end()
"设置编码
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
"显示行号
set nu
"突出显示当前行
set cul
"突出显示当前列
"set cuc
"显示括号匹配
set showmatch
"设置缩进
"设置Tab长度为4空格 
set tabstop=4 
"设置自动缩进长度为4空格
set shiftwidth=4
"继承前一行的缩进方式,适用于多行注释
set autoindent
"设置粘贴模式
set paste
"总是显示状态栏
set laststatus=2
"显示光标当前位置
set ruler
"让vimrc配置变更立即生效
autocmd BufWritePost $MYVIMRC source $MYVIMRC

"----------------------gutentags相关配置-----------------------
"gutentags搜索工程目录的标志,碰到这些文件/目录名就停止向上一级目录递归
let g:gutentags_project_root = ['.root', '.svn', '.git', '.project']
"所生成的数据文件的名称
let g:gutentags_ctags_tagfile = '.tags'
"将自动生成的 tags 文件全部放入 ~/.cache/tags 目录中,避免污染工程目录
let s:vim_tags = expand('~/.cache/tags')
let g:gutentags_cache_dir = s:vim_tags
"检测 ~/.cache/tags 不存在就新建
if !isdirectory(s:vim_tags) 
    silent! call mkdir(s:vim_tags, 'p') 
endif
" 配置 ctags 的参数
let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q']
let g:gutentags_ctags_extra_args += ['--c++-kinds=+pxI']
let g:gutentags_ctags_extra_args += ['--c-kinds=+px']

"---------------------NERDTree相关配置----------------------------
""将F1设置为开关NERDTree的快捷键
nnoremap <silent> <F1> :NERDTree<CR>
""修改树的显示图标
let g:NERDTreeDirArrowExpandable = '+'
let g:NERDTreeDirArrowCollapsible = '-'
""窗口位置
let g:NERDTreeWinPos='left'
""窗口尺寸
let g:NERDTreeSize=30
""窗口是否显示行号
let g:NERDTreeShowLineNumbers=1
""不显示隐藏文件
let g:NERDTreeHidden=0
""打开vim时如果没有文件自动打开NERDTree
"autocmd vimenter * if !argc() | NERDTree | endif
""当NERDTree为剩下的唯一窗口时自动关闭
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
""打开vim时自动打开NERDTree
autocmd vimenter * NERDTree
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | exe 'cd '.argv()[0] | endif
"PHP自动补全
autocmd FileType php set omnifunc=phpcomplete#CompletePHP

效果:


image.png

image.png

推荐阅读更多精彩内容