入坑WSL(Windows Subsystem for Linux)

在笔记本上装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
Author: zcp
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source zcp !
评论
 Previous
matery主题改动日志 matery主题改动日志
折腾是永无止境的,刚开始觉得很完美的东西用一段时间后就开始发现各种不顺眼,于是东改西改;人就是这么不知足。 1 前言当前博客主题套用的hexo-theme-matery,功能都很齐全了,看是挺好看的;于是当时果断换成了这个主题
Next 
正则表达式学习笔记 正则表达式学习笔记
之前学过一遍正则表达式,结果好久不用基本上忘了,每次用都得重新打开网页搜索下;由于网上讲的参差不齐,还是自己总结下吧。大家都推荐这本书: 精通正则表达式 第3版 1 特殊作用 大写往往代表对小写能匹配的字符取补集 [_a-zA
  TOC