在Windows 11上安装好看的WSL2.0 和 Vim

· · 个人记录

前言

这篇博客将教你如何在Windows 11 x64环境上安装WSL 2.0并配置Vim 9.0 C/C++编程环境.

这篇博客涉及的知识点包括:

配置Windows 11可选功能

进入设置中的“应用”,选择“可选功能”,点击最下方“更多Windows功能”,按如下配置:

然后一定要重启系统,否则配置是无法生效的.

安装完成之后,你需要安装一个补丁:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

Win+X打开Powershell,然后运行命令:wsl --set-default-version 2

安装Ubuntu

下载http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice/files/8a26c76e-5a63-42d5-9f7d-df053c273363?P1=1667192241&P2=404&P3=2&P4=T%2bQKGr36IRdF%2fT1BsWQoJJhiVi7kg1XxQunbUS1upbKO%2bJFf2UU%2fJSdE%2fiougMcmrLqibUqhUbzNeR9ue3ofig%3d%3d安装所需运行库

下载http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice/files/1ed69a19-dba1-47a0-83ea-284bce77b10e?P1=1667218108&P2=404&P3=2&P4=mlL6%2fGravmsQNIJt8L5Rxjz8yTHtTvq14ChzuxeViqOVCxPInLwjdWmXMrdTxJPeoxj0SXMvRIsw4rJ44qTsFA%3d%3d 安装Ubuntu商店应用

安装之后,运行即可. 在过程中配置用户名称和密码之后,就可以登录WSL了.

安装终端软件Tabby

Tabby是一款相当好用的终端模拟软件,只需要安装后简单配置即可.

首先,进入Tabby的Github Release,然后下载最新版本(选择带有x64.exe后缀的安装程序).

如下图,在设置中选择语言,并开启Shell集成.

来到“外观”选项卡,可以配置字体大小、字重之类的东西.

终端背景要选择“取自配色方案”,这样在下文配置配色方案时才不会改不了背景.

作者认为默认字体太小,所以设置了18号字体.

可以通过修改自定义CSS来实现改背景,如:

.content.tabs-on-top {
background: url("背景URL") no-repeat;
/* background-size:cover;*/
}
.content {
background-color:rgba(0,0,0,0.45)
}

可以实现半透明背景图片.

在“配置与连接”选项卡中,将“新标签页的默认配置”改为WSL/Ubuntu.

在“终端”选项卡中,将“需要同时按下按键来点击链接”中选择“Ctrl”来避免你不小心点错跳出浏览器.

取消“复制带格式”和“Bracketed粘贴”来避免你在复制粘贴样例时粘贴多余的字符.

在“配色方案”选项卡中选择你喜欢的配色方案,这里就不放截图了. 作者选的是PaulMillr主题.

在“窗口”选项卡中,你可以打开“亚克力背景”然后通过调节不透明度来实现透明窗口,作者不太喜欢.

标签页可以看作者的配置,也可以自己配一下.

Ubuntu配置apt安装源

在终端中执行如下命令:

sudo cp /etc/apt/sources.list ~/backup.sources.list # 防止出锅,备份
sudo rm /etc/apt/sources.list
# sudo可能会让你输入你设置的密码,下文同
sudo vim /etc/apt/sources.list

i键进入插入模式,输入从清华大学开源软件镜像站获取到的内容,按:wq保存并退出.

使用如下命令更新软件包缓存:

sudo apt update

升级、安装环境

在终端中执行如下命令:

sudo apt upgrade # 更新软件包
sudo apt install gcc make autoconf clang clangd python3 gdb dos2unix git # 安装C/C++环境与编译环境

删除旧版Vim,安装新版Vim

在终端中执行如下命令删除旧版Vim

sudo apt remove vi vim-tiny vim vim-runtime

卸载之后,你需要下载Vim的源码,执行以下命令获取:

git clone https://github.com/vim/vim.git # 镜像:https://gitee.com/mirrors/vim.git
cd vim

获取完毕之后,你需要先安装一下依赖包:

sudo apt install libncurses5-dev libatk1.0-dev libbonoboui2-dev libcairo2-dev libxpm-dev libxt-dev python-dev python3-dev ruby-dev lua5.1 liblua5.1-dev libperl-dev

然后编译安装:

./configure --enable-multibyte --enable-cscope --enable-python3interp=yes --with-x # 如果报错,就去除对应命令行参数
make
sudo make install

配置Vim(使用作者的配置)

创建.vim目录和其配置文件:

mkdir ~/.vim
mkdir ~/.vim/autoload
touch ~/.vimrc

下载plug.vim~/.vim/autoload

wget https://github.com/junegunn/vim-plug/raw/master/plug.vim -O ~/.vim/autoload/plug.vim

将作者的.vimrc配置文件输入进去(感谢@Ptilopsis_w的贡献)

vim9script

call plug#begin('~/.vim/plugged')
    Plug 'connorholyday/vim-snazzy'
    Plug 'vim-airline/vim-airline'
    Plug 'vim-airline/vim-airline-themes'
    Plug 'preservim/nerdtree'
    Plug 'luochen1990/rainbow'
    Plug 'jiangmiao/auto-pairs'
    Plug 'Yggdroot/indentLine'  
    Plug 'prabirshrestha/vim-lsp'
    Plug 'prabirshrestha/asyncomplete.vim'
    Plug 'mattn/vim-lsp-settings'
    Plug 'prabirshrestha/asyncomplete-lsp.vim'
    Plug 'kaicataldo/material.vim'
    Plug 'tomasr/molokai'
call plug#end()

source $VIMRUNTIME/mswin.vim
behave mswin

# 键盘映射
map H ^
map L $
map <C-a> ggvG$
map <F1> :NERDTreeToggle<CR> 
map <F2> :LspRename<CR>
map <F9> :w<CR>:call Run()<CR>
#imap <F9> <ESC>:w<CR>:call Run()<CR>
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
inoremap <expr> <cr> pumvisible() ? "\<C-y>\<cr>" : "\<cr>"
inoremap ( ()<Esc>i
inoremap [ []<Esc>i
#inoremap < <><Esc>i
inoremap { {}<Esc>i
inoremap ' ''<Esc>i
inoremap " ""<Esc>i
inoremap { {<CR>}<Esc>O

#set lines=40 # 默认显示行数
#set columns=160 # 默认显示列数
set clipboard+=unnamed # 与系统共享剪切板
set number # 默认显示行号
colorscheme material # 默认主题
#g:molokai_original = 1 # molokai 主题设置
set guifont=Consolas\ 14 # 默认字体
set encoding=utf-8 # 默认编码
syntax on # 打开高亮
syntax enable
language C # 默认语言

set nocompatible # 关闭兼容vi模式
filetype on # 检测文件类型
filetype indent on # 不同文件使用不同缩进
filetype plugin on # 插件文件类型
set mouse=a # 兼容鼠标

set expandtab # 将缩进设置为空格
set tabstop=4 # 将缩进设置为4空格
set shiftwidth=4 
set softtabstop=4
set guioptions-=T

set backspace=indent,eol,start # 跨行退格
set foldmethod=indent # 以缩进方式折叠代码
set foldlevel=99

set autoindent # 继承前一行的格式
set smartindent # C程序自动缩进
set cindent # 使用C样式的缩进
#set cursorline # 高亮显示光标所在行
#set nowrap # 关闭自动换行
set showcmd # 显示输入的命令
set wildmenu # 输入命令时Tab显示提示
set hlsearch # 高亮显示搜索结果
set incsearch # 动态显示搜索结果
exec "nohlsearch"
set ignorecase # 搜索模式忽略大小写
set smartcase # 智能模式 自动判断搜索时是否忽略大小写(仅在启用ignorecase时生效)

def g:Run() # 使用g++编译并运行cpp文件
    :!g++ "%" -std=c++14 -g -Wall -Wextra -fsanitize=undefined,address -o "%<" && "./%<"
enddef

# airline
set ambiwidth=double # 设置为双字宽显示
g:airline_theme = 'serene'
g:airline_powerline_fonts = 1
g:airline#extensions#tabline#enabled = 1
g:airline#extensions#tabline#left_sep = ' '
g:airline#extensions#tabline#left_alt_sep = '|'
g:airline#extensions#tabline#buffer_nr_show = 1

# rainbow bracket
g:rainbow_conf = {
  \     'guifgs': ['#FC4646', '#FF8800', '#FFD700', '#44EB35', '#4BB7FF', '#FF00D4']
  \ }
g:rainbow_active = 1

# indentLine
g:indentLine_enabled = 1
g:indentLine_char = '|'
g:indentLine_conceallevel = 2

# vim lsp
g:lsp_semantic_enabled = 1
g:lsp_diagnostics_highlights_enabled = 0
set foldmethod=expr
set foldexpr=lsp#ui#vim#folding#foldexpr()
set foldtext=lsp#ui#vim#folding#foldtext()

读者根据注释可以对其进行一些修改.

然后,运行命令vim以打开vim,输入命令:PlugInstall

当出现上图所示,你就安装完成了.

(若下载太慢,可下载后面资源里的.vim文件夹覆盖)

为你的好友配置SSH服务以共享源程序和WSL环境

安装SSH服务器(应该已经安装了):

sudo apt install openssh-server

启动服务:

sudo service ssh start

获取WSL的动态IP:

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether be:b8:44:de:32:1b brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 8e:03:b2:f3:bd:6d brd ff:ff:ff:ff:ff:ff
4: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:20:89:09 brd ff:ff:ff:ff:ff:ff
    inet 172.18.127.250/20 brd 172.18.127.255 scope global eth0 # 这里就是IP出现的位置 IP: 172.18.127.250
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe20:8909/64 scope link 
       valid_lft forever preferred_lft forever

在Windows Powershell进行端口代理(管理员运行):

C:\> netsh interface portproxy add v4tov4 listenport=22 connectaddress=<WSL动态IP> connectport=22 listenaddress=<好友连接你的IP> protocol=tcp

注意以上方法不是一劳永逸的. 每次重启IP都会重新分配,以上过程需要重来.

连接SSH:

ssh <用户名>@<你的IP> # Linux
C:\> ssh <用户名>@<你的IP> # Windows

效果

补充:亮色主题

Vim 主题:

colorscheme molokai
g:rehash256 = 1

Tabby 主题:Paper

CSS设置:

.content.tabs-on-top {
background: url("https://cdn.luogu.com.cn/upload/image_hosting/a6gaiexk.png") no-repeat;
 background-size:cover;
}

终端背景取自配色方案.

在 Windows 上使用 WSL GVim

安装VcXsrv Windows X Server: https://sourceforge.net/projects/vcxsrv/

Disable access conreol 开启.

Windows下运行ipconfig,然后找到WSL对应的IPv4地址.

~/.bashrc中加入export DISPLAY=ip:0.

然后运行gvim xxx即可.