在笔记本上装Ubuntu用了几个月之后,由于一些软件只能在windows下运行,来回切换系统也挺麻烦的,故决定安装个WSL(Windows Subsystem for Linux)试试。意外感觉用起来挺舒服的;一是平常需求也不多,就用下Shell命令、github、Vim;二是要运行一些大型程序的时候也不会在笔记本上作死,直接阿里云租个抢占式的服务器岂不美滋滋。
WSL也是让我重新启用了封印多年的Win10更新的一个原因,之前因为觉得强制更新贼烦直接彻底禁用了,导致我的Windows一直停留在1803版本,而且我想启动更新都启动不了;于是一狠心干脆重装windows算了。好在用了一段时间WSL后感觉这一阵折腾还是挺值的。
1 WSL安装
更新windows,越新越好-> 打开开发者模式->Windows功能中勾选Subsystems->应用商店安装Ubuntu->初始设置->配置使用环境
安装过程没什么要说的,主要是如何配置让WSL使用更加方便;由于没有图形界面(当然也可以有不过感觉没必要装)很多软件都不需要装,直接用Windows版就行了。我就只装了python、Vim、OpenFOAM、Git等一些通过shell来运行的东西。
2 WSL配置
都是一些常规操作,尽量流程化也方便以后在别的机器上配置。
更详细的过程: 随手找的一篇知乎文章
2.1 更换软件源
#使用 root 权限登录,后续输入密码
sudo -i
#接下来备份当前源,输入以下命令
cp /etc/apt/sources.list /etc/apt/sources.list.old
#这个sources.list文件就是源文件,打开在开头添加阿里云的源
vim /etc/apt/sources.list
用阿里云的源,复制保存即可:
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
然后就是熟悉的无脑一波:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential
2.2 外观配置
装好SSL后最重要的一步。要是每次打开shell是一个丑到吐的界面,根本没有心情往下用,那么更别谈提高生产力了。
刚开始折腾了好久那个用Ubuntu图标打开的终端界面,怎么调都很难看,后面发现可以<Shift>
+右键直接打开Linux Shell,这个界面比原来那个要好多了。所以就这样凑合用了一段时间…
直到我发现了正在开发中的Windows Terminal,虽然还在开发设置只能通过修改profiles.json
文件完成,但最后的效果还是可以的;配置文件的位置大概在C:\Users\Administrator\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState
,(后面那一串不知道是不是每台电脑都一样),直接照它的注释编辑就行了。
Github上有很多相关的Schemes,选个顺眼的就行~
这里还是具体操作一下如何有效率地换Schemes吧,首先clone项目到本地进入windowsterminal
文件夹,运行Linux shell
命令:
cat * > log #将所有.json文件拼接到一起
然后用Vim打开,录制一个宏,给大括号末尾添加个,
号,最后粘贴log文件到profiles.json
,之后就可以直接一个个地看主题效果了。
如果不是在WSL环境下,我还真不知道如何有效率地编辑,只怕会一个个文件打开然后用记事本粘贴到
profiles.json
里试吧;这也是为什么我觉得Linux好用的地方。虽然Windows下也可以用Gvim,但我尝试了几番用户体验实在是糟糕,没用几分钟就忍不住卸载了。
我的配置文件是这样的:
// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation
{
"$schema": "https://aka.ms/terminal-profiles-schema",
"defaultProfile": "{2c4de342-38b7-51cf-b940-2309a097f518}",
"initialCols": 120,
"initialRows": 30,
// 亮色或暗色主题,可选值 "light", "dark", "system"
"requestedTheme": "dark",
// 合并标题栏和标签栏
"showTabsInTitlebar": true,
// 如果 showTabsInTitlebar 与本值同为 false 时,自动隐藏标签栏
"alwaysShowTabs": true,
// 在标题栏上显示当前活动标签页的标题
"showTerminalTitleInTitlebar": true,
// 双击选择时用于分词的字符
"wordDelimiters": "",
// 选择时复制到剪贴板
"copyOnSelect": false,
//这一部分profiles是默认配置
"profiles":
[
{
// Make changes here to the powershell.exe profile
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"name": "Windows PowerShell",
"commandline": "powershell.exe",
"hidden": false
},
{
// Make changes here to the cmd.exe profile
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"name": "cmd",
"commandline": "cmd.exe",
"hidden": false
},
{
"guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
"hidden": false,
"name": "Ubuntu",
"source": "Windows.Terminal.Wsl"
}
],
// Add custom color schemes to this array
//这一部分覆盖上面的一些设置
"profiles":
[
{
// 每个 Profile 的唯一标识符,生成方法见下
"guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
// 设置为 true 即可在新建菜单中隐藏
"hidden": false,
// 名字,会显示在菜单中
"name": "Ubuntu",
// 启动命令行
"commandline": "wsl.exe",
// 启动目录,从当前路径启动
"startingDirectory": ".",
// 字体设置,改了一圈回来还是觉得默认的挺好
"fontFace": "Consolas",
"fontSize": 12,
// 背景亚克力透明效果(窗口失去焦点时无效)
"useAcrylic": true,
"acrylicOpacity": 0.75,
// 背景图片(不能和上面的效果同时用?)
//"backgroundImage" : "X:\\assets\\background.png",
//"backgroundImageOpacity" : 0.5,
// "backgroundImageStretchMode" : "uniformToFill",
// 菜单与标签中显示的图标
//"icon": "X:\\assets\\UbuntuLogo.scale-100.png",
// 配色方案,见下
"colorScheme": "synthwave",
// 光标颜色
"cursorColor": "#FFFFFF",
// 光标类型,可选值 "vintage" ( ▃ ), "bar" ( ┃ ), "underscore" ( ▁ ), "filledBox" ( █ ), "emptyBox" ( ▯ )
"cursorShape": "vintage"
// ... 其他配置请参见官方文档
},
{
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
"hidden": true,
"name": "Azure Cloud Shell",
"source": "Windows.Terminal.Azure"
}
],
"schemes":
[
{
"name": "synthwave",
"black": "#000000",
"red": "#f6188f",
"green": "#1ebb2b",
"yellow": "#fdf834",
"blue": "#2186ec",
"purple": "#f85a21",
"cyan": "#12c3e2",
"white": "#ffffff",
"brightBlack": "#000000",
"brightRed": "#f841a0",
"brightGreen": "#25c141",
"brightYellow": "#fdf454",
"brightBlue": "#2f9ded",
"brightPurple": "#f97137",
"brightCyan": "#19cde6",
"brightWhite": "#ffffff",
"background": "#000000",
"foreground": "#dad9c7"
}
],
// Add any keybinding overrides to this array.
// To unbind a default keybinding, set the command to "unbound"
"keybindings": [
//各窗口间移动
{ "command": { "action": "moveFocus", "direction": "down" }, "keys": [ "alt+j" ] },
{ "command": { "action": "moveFocus", "direction": "left" }, "keys": [ "alt+h" ] },
{ "command": { "action": "moveFocus", "direction": "right" }, "keys": [ "alt+l" ] },
{ "command": { "action": "moveFocus", "direction": "up" }, "keys": [ "alt+k" ] },
//分割 ,分割后的窗口好像只能通过exit命令关闭?没有快捷键
{ "command": "splitHorizontal", "keys": [ "ctrl+shift+o" ] },
{ "command": "splitVertical", "keys": [ "ctrl+shift+e" ] },
//新建标签页
{ "command": "closeTab", "keys": [ "ctrl+shift+w" ] },
{ "command": "newTab", "keys": [ "ctrl+alt+t" ] },
{ "command": "closePane", "keys": [ "unbound" ] },
//标签页移动
{ "command": "nextTab", "keys": [ "alt+2" ] },
{ "command": "prevTab", "keys": [ "alt+1" ] }
]
}
guid
复制它默认的就完事了,字体可以自己安装,或者到计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink
注册表找一找系统自带哪些,选个好看的(我觉得windowsterminal自带的字体Consolas就挺好的了)。然后就是快捷键,虽说V平常都在Vim里进行窗口分割什么的,但如果执行shell命令还是在Vim外打开比较方便,之前Ubuntu里用的是Terminator终端,所以这里快捷键也是依照之前的习惯来的;为了避免和Vim配置冲突不必要的快捷键能关则关。最终效果:
2.3 增加右键菜单
如果不想每次打开都要cd半天的话还是加一个在当前目录直接右键打开terminal的功能比较好;根据PRIN博客的设置,建立批处理文件:
@echo off
reg.exe add "HKEY_CLASSES_ROOT\Directory\Background\shell\wt" /f /ve /d "Windows Terminal here"
reg.exe add "HKEY_CLASSES_ROOT\Directory\Background\shell\wt" /f /v "Icon" /t REG_EXPAND_SZ /d "X:\assets\terminal.ico"
reg.exe add "HKEY_CLASSES_ROOT\Directory\Background\shell\wt\command" /f /ve /t REG_EXPAND_SZ /d "\"%%LOCALAPPDATA%%\Microsoft\WindowsApps\wt.exe\""
pause
管理员运行后就可以看到右键菜单了,当然profiles.json
里要设置"startingDiretory" : "."
。
2.4 配置zsh
之前一直使用bash,感觉挺顺手的,直到前几天逛别人博客发现了Zsh这种强大的终端。
2.4.1 zsh安装
sudo apt-get install zsh
echo $SHELL # 查看当前shell
cat /etc/shells #查看系统所有shell
chsh -s $(which zsh) #设置zsh为默认终端
2.4.2 oh-my-zsh安装及zsh配置
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" #安装oh-my-zsh
ls ~/.oh-my-zsh/themes #查看可用主题
vim ~/.zshrc #编辑配置文件;如修改主题为ys,增加插件等。相当于bash的bashrc文件
sudo apt-get install autojump;git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions;git clone git://github.com/zsh-users/zsh-syntax-highlighting $ZSH_CUSTOM/plugins/zsh-syntax-highlighting #安装autojump、zsh-autosuggestions、zsh-syntax-highlighting三个插件
再在~/.zshrc
的插件部分改为:
plugins=(
git
autojump
zsh-autosuggestions
zsh-syntax-highlighting
)
.zshrc
相当于bash里的.bashrc
,之前bash里的环境变量设置可以直接搬过来;关于更多zsh以及oh-my-zsh的用法有待进一步学习…
2.5 Vim配置
不同于在Ubuntu里面使用Vim,WSL里有的快捷键可能变得不能用了,比如往前删除我常常用<ctrl-8>
代替<backspace>
,但WSL里这一排快捷键就失效了。所以最好的选择就是给自己的Vimrc
配置文件直接新建一个用于WSL的branch,对一些命令进行微调。
这是我的vimrc配置仓库,里面记录了我学习Vim的历程,我看了很多人的配置文件,提取了一些出彩的地方整合在一起,每条设置都写了注释,也方便别人学习。
Vim本身就是一个不断磨合的过程,不存在一成不变的配置,将来我也会不断更新我的.vimrc
~
其中值得一讲的就是与windows剪切板的通信,之前在Ubuntu系统Vim通过"+y
就可以访问系统剪切板,设置一个映射noremap <C-y> "+y
就能很好的解决和系统剪切板的互相访问;
对于WSL,普遍的做法是通过/mnt/c/Windows/System32/clip.exe
将Vim的内容传到windows剪切板。粘贴则是直接通过paste模式
下<Ctrl+Shift+V>
进行操作。只需要在.vimrc
中如下设置:
"适配Linux子系统,能够正常和windows复制粘贴文本
"利用/mnt/c/Windows/System32/clip.exe
func! GetSelectedText()
normal gv"xy
let result = getreg("x")
return result
endfunc
"if !has("clipboard") && executable("/mnt/c/Windows/System32/clip.exe")
"复制
noremap <silent><C-y> :call system('/mnt/c/Windows/System32/clip.exe', GetSelectedText())<CR>
"剪切
noremap <silent><C-x> :call system('/mnt/c/Windows/System32/clip.exe', GetSelectedText())<CR>gvx
特别需要注意的是:一定要确认WSL有权限访问clip.exe
。
以下内容更新于2020-02-10 11:05:47
3 总结,WSL初始化配置脚本
试了试WSL2结果升级后打都打不开,bug一堆,萌新劝退…只好又回到WSL重新安装一遍环境,真的是手贱。
免得每次配置都东凑西凑,做个小结好了
3.1 配置软件源
前面提到过,不再细讲
3.2 常用软件安装
sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install git -y
sudo apt-get install curl -y
sudo apt-get install vim-gtk3 -y
sudo apt-get install zsh -y
sudo apt-get install tree -y
sudo apt install build-essential cmake python3-dev -y
sudo apt-get install python3-pip -y
sudo apt-get install nodejs -y
# sudo apt-get install nodejs-legacy -y
sudo apt-get install npm -y
sudo npm install -g hexo-cli
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
curl -LO https://github.com/BurntSushi/ripgrep/releases/download/11.0.2/ripgrep_11.0.2_amd64.deb
sudo dpkg -i ripgrep_11.0.2_amd64.deb
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" #安装oh-my-zsh
3.3 Vim及zsh配置
cd
sudo apt-get install autojump;git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions;git clone git://github.com/zsh-users/zsh-syntax-highlighting $ZSH_CUSTOM/plugins/zsh-syntax-highlighting #安装autojump、zsh-autosuggestions、zsh-syntax-highlighting三个插件
chsh -s $(which zsh) #设置zsh为默认终端
git clone https://github.com/chengpengzhao/My_vimrc.git
cd My_vimrc
git checkout dev-WSL
cp .vimrc ~/.vimrc
cp .zshrc ~/.zshrc
mkdir ~/.vim/UltiSnips
cp *.snippets ~/.vim/UltiSnips/
# cp ./'.vimrc(ssh)' ../.vimrc
source ~/.zshrc
#先打开Vim运行PlugInstall
cd ~/.vim/plugged/YouCompleteMe
python3 install.py --all
3.4 Github配置
git config --global user.name "chengpengzhao"
git config --global user.email "[email protected]"
git config --global core.quotepath false #防止用tab键自动补全的中文文件名乱码
git config --global core.autocrlf false
git config --global core.filemode false
git config --global core.safecrlf true
ssh-keygen -t rsa -C "[email protected]"
vim ~/.ssh/id_rsa.pub # 复制添加到github