前言

前些天,按照一个错误的博客进行磁盘挂载把我的Mint给搞崩了,此后花了两三天时间尝试了Manjaro总是无法安装Bumblebee或者Prime。但是更诡异的问题是我在双系统下启动Win10后,Mint或者Manjaro的磁盘挂载就会出问题,显示无法Mount,我寻思我的C盘没有挂载过不应该会出现无法识别sda7的问题,在google了很久之后依然没有好的解决方法,结果就是在双系统环境下启动Win10后我的Linux系统就一定崩掉,根本无法进入,也无法恢复数据,没办法,只能放弃折腾重回Win10了。
重回Win10后,我还是是否怀念Manjaro下的终端,所以希望在Win10下配置一个好用的zsh。
基本要求:

  • 能够正常使用bash
  • 可以使用cuda
  • 可以使用docker

多次尝试大概有以下三种方法:

  • ConEmu和Msys2
  • ConEmu的ChildGUI和Mintty下的Msys2
  • ConEmu和ArchWSL

最后我还是选择了ConEmu+ArchWSL

ConEmu+Msys2

Msys2预览

Msys2可以支持pacman,这样就可以在Win10下利用arch极为丰富的软件源,并且msys2 配套的编译器中有MinGW-64,很完美了。
截图如下:

GPU正常:

Win10的screenfetch:

(Windows的ascii字符画图标好丑,GPU显示的有点问题)

ConEmu配置

我主要参考的是
https://blog.csdn.net/hustlei/article/details/86688175
设置Quake在设置->通用->Quake风格->勾选Quake式向下滑动

使用Ctrl+C和Ctrl+V复制粘贴

安装Clink,https://mridgers.github.io/clink/
解压,修改文件夹名字为clink,复制到ConEmu根目录下,我的是C:\Program Files\ConEmu\ConEmu
勾选Clink,即可

加速ctrl+`呼出

不知道为什么总是得点两次才能呼出,很烦。

选中上面的restore inactive wiindow by hotkey可以变快,爽!

Vim的Backspace问题的解决

在.vimrc中添加

set backspace=indent,eol,start
inoremap <Char-0x07F> <c-r>=Backspace()<CR>
inoremap <BS> <c-r>=Backspace()<CR>func Backspace()if col('.') == 1if line('.')  != 1return  "\<ESC>kA\<Del>"elsereturn ""endifelsereturn "\<Left>\<Del>"endif
endfunc

参考:https://github.com/Maximus5/ConEmu/issues/641

其他设置

  • 配色:xterm,虽然只支持8种颜色(tput colors),但是看起来艳丽一些。

Msys2安装与配置

我主要参考的是
https://hustlei.github.io/2018/11/msys2-for-win.html
其中ConEmu配置Msys2的问题上述博客有问题,ConEmu并不能自动识别Msys2,可安装下面的方法配置。
https://blog.csdn.net/hustlei/article/details/86688160

启动使用zsh的方法直接把上述的\usr\bin\bash.exe换成\usr\bin\zsh.exe即可

ConEmu的ChildGUI与Mintty下的Msys2

conemu是通过cmd实现的,tmux不能直接打开,在ssh到服务器后使用tmux会出现显示的问题,在刷新后总会出现底部栏重叠,还有光标错位的问题。
使用mintty可以解决tmux的问题。
大致按照上述做法安装完毕ConEmu和Msys2后只需要配置一下ChildGUI

Mintty的任务配置

C:\msys64\usr\bin\mintty.exe -i /msys2.ico -t "%CONTITLE%" "/usr/bin/zsh" -new_console:C:"%D%\msys2.ico"

Mintty利用wintty使用Windows下的工具

mintty不能直接调用Windows API,所以不能直接用Windows下的python、MySQL环境。
使用winpty python可以解决这个问题。
还可以设置alias:

alias mysql="winpty mysql"
alias node="winpty node"
alias python="winpty python"
alias ipython="winpty ipython"
alias psql="winpty psql"
alias redis-cli="winpty redis-cli"
alias ping="winpty ping"
alias ipconfig="winpty ipconfig"

ping, ipconfig避免乱码
参考:https://creaink.github.io/post/Computer/Windows/win-msys2.html

鼠标右键菜单集成

设置->集成->右键菜单集成
如果注册过了,首先反注册
命令:{Msys2::Mintty}
图标文件:C:\Program Files\ConEmu\ConEmu64.exe,0
点击注册
参考: https://blog.xinshangshangxin.com/2015/02/22/ConEmu%E8%AE%BE%E7%BD%AE%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E6%89%93%E5%BC%80/

ArchWSL

安装与配置

安装这位大佬的方法安装:https://www.yumenaka.net/2019/03/21/windows10_wsl_archlinux/
简单配置一下:https://lengthmin.me/posts/install-arch-wsl/
安装Wintty:https://github.com/mintty/wsltty/releases
集成到Conemu:

C:\Users\gz\AppData\Local\wsltty\bin\mintty.exe -i "C:\Users\gz\AppData\Local\wsltty\wsl.ico" --WSL= --configdir="C:\Users\gz\AppData\Roaming\wsltty"

还是上面的老办法,在设置->启动->任务中新建一个,在下方填入上述命令组

常用工具

网络工具

pacman -S net-tools dnsutils inetutils iproute2

Vim配置

pacman -S vim安装
vim ~/.vimrc粘贴

set t_Co=256
set background=dark
syntax on
set nu!
colorscheme molokai
set mouse=a
nmap <silent> `q <Plug>WslCopy

vim用的人比较多,但是我还是感觉几种模式互相切换有些反人类,我用的多的还是micro

复制到系统剪切板

https://github.com/christianfosli/wsl-copy

Vim配置

set t_Co=257
set background=dark
syntax on
set nu!
colorscheme molokai
set mouse=a
nmap <silent> `q <Plug>WslCopy
xmap <silent> `q <Plug>WslCopy

molokai安装教程很多,一搜就有

Micro安装与配置

micro的github地址:https://github.com/zyedidia/micro
pacman无法安装,只能用yay
之前没用过yay安装的话还得配置一下,安装fakeroot、binutils,否则会安装失败
可以参考这个日本人写的东西https://qiita.com/Hayao0819/items/1d647683bf458d10351a
片假名比较多,中国人理解起来应该没太大问题(反正我看得懂)
我当时是这样做的

  1. 安装base-devel,pacman -S base-devel
  2. 下载fakeroot-tcp
  3. 安装fakeroot-tcp,pacman -U fakeroot-tcp-1.23-1-x86_64.pkg.tar.xz
    fakeroot有点问题,需要使用fakeroot-tcp替代,安装时遇到冲突选择卸载fakeroot。
pacman -S yay
yay -S micro

如果你在root下需要切换到普通用户态su - your_user_name(没有普通用户就创一个)
yay不能在root下安装

复制粘贴

之所以费这么大劲安装micro,就是这个的快捷键跟windows类似,看起来比nano美观得多
按住shift,用鼠标选中文字,ctrl+c就可以复制到系统剪切板,需要安装xsel或者xclip,pacman一下就行了。
复制还是有点bug,有行号时只能复制一行,否则会带上行号,也只能粘贴一页。
但是直接用ctrl+c和ctrl+v还是很爽。

  • 从系统剪切板粘贴:ctrl+shift+v
  • 从本文件粘贴:ctrl+v
  • 从系统剪切板复制: 按住shift鼠标选中后,ctrl+c
  • 从本文件复制:ctrl+c

zshrc配置

export ZSH="/root/.oh-my-zsh"ZSH_THEME="ys"ZSH_DISABLE_COMPFIX="true"plugins=(git zsh-autosuggestions zsh-syntax-highlighting)source $ZSH/oh-my-zsh.shalias python="python.exe"
alias conda="conda.exe"
alias ipython="ipython.exe"
alias nosetests="nosetests.exe"
alias pip="pip.exe"
alias nvidia-smi="/mnt/c/Program\ Files/NVIDIA\ Corporation/NVSMI/nvidia-smi.exe"
alias docker=docker.exe
alias docker-compose=docker-compose.exe
alias proxy="export ALL_PROXY=socks5://127.0.0.1:1080"
alias unproxy="unset ALL_PROXY"
alias ls="sudo ls"
alias jupyter="jupyter.exe"
alias cht="/mnt/c/msys64/home/gz/bin/cht.sh"
alias gz="su - gz"
alias ipconfig="ipconfig.exe"
alias qjup="kill $(pgrep jupyter)"

一些bug

使用Mintty无法杀死所有的Windows程序(比如ping.exe,jupyter.exe等),所以直接安装ArchWSL还是有点问题,下面用UbuntuWSL解决这个问题。

ConEmu+UbuntuWSL的壳+ArchWSL的boottrap

ArchWSL boottrap安装

参考https://www.bilibili.com/read/cv3258103/
写得十分详细,跟下来基本没有什么问题。

集成到ConEmu

方法一(较为完美)

参考https://twasa.ml/post/wsl/
在设置->启动->任务中新建,命令组填入

set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" &   %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -cur_console:pm   -t zsh -l


这里可以使用ConEmu的配置而非ChildGUI下使用Mintty的配置(ConEmu的配置更多一些,更灵活)
使用了上述配置后还是有问题,在wsl中运行的Windows 程序无法使用ctrl+C终止。
由于目前WSL不支持Linux原生Docker以及显卡驱动,所以无可避免地使用docker.exe和python.exe在WSL中使用Windows下的程序。但是无法用Ctrl+C终止就很烦,开启了就jupyter notebook就没法停止,调用了notepad.exe就没法关掉,实在令人窒息。
参考GitHub上的issue,有两种解决方法:

  • 在.bashrc或者.zshrc最后加上一行,rundll32.exe,只在1903以前可用(在本人Win10企业版LTSC上可以关掉notepad.exe但是无法关掉jupyter notebook,即1809, 版本可在Win+R输入winver后查看)
  • 使用davidbailey00大佬的脚本:https://gist.github.com/davidbailey00/004da18b89fff0534edd9b6f6082bcaf
    按照他的说明操作即可:
  1. Copy script contents to /usr/bin/winrun
  2. Make the file executable using sudo chmod +x /usr/bin/winrun

可以关掉notepad.exe,也可以关掉jupyter notebook。
但是使用winrun ping.exe z.cn没有结果输出,不知道为什么,无所谓了,可以pacman -S net-tools安装Linux下的ping命令,虽然有时候ping错了网址会耗时所以上述的ping.exe不能用有一点影响,但用Linux下的ping替换后问题不大。
其余的,winrun ipconfig.exe也不行,影响不大,ipconfig速度很快,没必要用ctrl+c终止。
在micro、vim中不能直接用ctrl+c,ctrl+v利用系统剪切板复制粘贴,可以这样:shift+左键选择文本可以复制一行(多行会把行号复制进去),alt+左键选择矩形,框住多行就可以多行复制了。
暂时没遇到什么不能忍受的问题,本来Windows下独有的命令行工具都一般般,没必要太过在意。
这种方式不局限于ConEmu,应该同样适用WSLTTY,Terminus,Fluent Terminal,Hyper等终端模拟器。

方法二(在vim中无法使用鼠标定位光标)

ConEmu任务配置的命令组写C:\Windows\System32\bash.exe -cur_console:p5
除了-cur_console:p5外的参数无法使用方向键和鼠标滚动。
但是就算加了这个参数还是无法使用鼠标定位光标。
但是这样可以直接像WSL默认终端一样调用终止命令,不存在无法终止的问题。
唯一难受的就是在vim和micro中无法用鼠标定位光标。
右键集成得改改命令:
命令:{WSL::Arch} -cur_console:p5
图标文件:C:\ProgramFiles\ConEmu\ConEmu64.exe,0

改右键集成是我翻了半天注册表才琢磨出来的,佛了。
这种方法接近原生,但鼠标还是有点问题。方法一的任务命令组配置应该是最合适的了

结语

对巨硬家的产品,我向来是表示怀疑的。
下次换笔记本争取只装Manjaro,在虚拟机里跑个Win10写写Word什么的就够了
真是太折腾了,从暑假把系统搞崩了,格式化固态硬盘重装系统后丢失了我的Ubuntu后一直探索到了现在,半个学期了,目前的应该是最完美了的。

Window 10下使用zsh的多种体验——ConEmuMsys2+ConEmu_ChildGUIMsys2Mintty+ConEmuArchWSL相关推荐

  1. Window 10下JAVA环境配置

    Window 10下JAVA环境配置   1.下载结束如图: 注意:根据自己windows系统的版本以及位数下载对应的JDK 2.配置环境 将上面下载的JDK安装好,我安装在了F盘,路径如下:F:\J ...

  2. Window 10下 Sqlite安装教程

    Window 10下 Sqlite安装教程 下载 官网下载地址:https://sqlite.org/download.html 找到适配自己电脑系统的dll和tools下载. 安装配置 按照如下几个 ...

  3. window 10下 Spark 安装简单使用

    文章目录 安装虚拟机管理软件vagrant: 安装VirtualBox, vagrant默认使用VirtualBox: 使用windows的powershell: 进入centos, 安装jdk: 安 ...

  4. window 10 下配置 cygwin ;并且安装 snaphu --SNAP解缠

    写在前面的话:一定要看完,一定要看完,一定要看完,再按照此步骤安装. cygwin 下载网址:Cygwin 安装教程:Cygwin安装教程(图文)-百度经验 (baidu.com) snaphu 下载 ...

  5. 修复 Window 10/11 下 “未提供有关电源计划的信“ 错误

    如果你碰到因为某些原因(大概率是优化软件造成),系统自带的电源计划文件(或注册表?)被破坏,导致无法更改电源计划设置,也无法创建新的电源计划, 知乎所讲的要两台电脑太反锁 修复 Window 10 下 ...

  6. Docker Toolbox在window 10 home 下挂载宿主机目录到容器的正确操作

    Docker Toolbox在window 10 home 下挂载宿主机目录到容器的正确操作 原文:Docker Toolbox在window 10 home 下挂载宿主机目录到容器的正确操作 由于我 ...

  7. OpenVINO 2022.3实战二:Window 10 环境下用 OpenVINO 2022.3部署yolov5-seg 7.0

    OpenVINO 2022.3实战二:Window 10 环境下用 OpenVINO 2022.3部署yolov5-seg 7.0 1 配置OpenVINO C++开发环境 见 OpenVINO 20 ...

  8. WIndow 10 环境下使用CURL工具完成企业微信机器人的提醒功能

    企业微信机器人提醒功能实现说明 本文档主要讲解企业微信机器人的提醒功能的在window下的实现方法,主要内容包括机器人的创建,CURL工具使用环境的搭建和最终实现消息提醒功能三个主要模块.企业微信机器 ...

  9. eclipse+adt+android sdk,64位Ubuntu 11.10下Android开发环境的搭建(JDK+Eclipse+ADT+Android SDK详细)...

    Ubuntu 11.10 下 Android开发完全安装另一篇: 平台: 操作系统:ubuntu11.10 1.在ubuntu11.10下的ubuntu软件中心中有自带的eclipse,但是这里我们不 ...

最新文章

  1. filter[过滤器]使用大全
  2. 阿里达摩院正式加入5G巨头仗:瞄准新基建,成立XG实验室,要与华为战一战
  3. ProtoBuf协议
  4. HD_1166敌兵布阵
  5. JAVA中使用XFire调用WebService接口
  6. Mac下的Parallel Windows忘记密码怎么办?
  7. Spring Async和Java的8 CompletableFuture
  8. 扩展云存储边界,阿里云推出全球首个云定义存储产品
  9. python调用通达信函数_Funcat 将同花顺、通达信等的公式写法移植到了 Python 中
  10. java实现表白动图
  11. Linux常用命令——sysctl命令
  12. H.266/VVC相关技术学习笔记16:VTM6.0中的CIIP技术(帧内帧间联合预测)
  13. JAVA(第六版)——期末复习2
  14. 气象ts评分_中国气象局--国家气候中心--气候系统监测·诊断·预测·评估
  15. AutoSAR系列讲解(实践篇)8.5-C/S原理进阶
  16. 百度IFE2018任务--20-21天
  17. 时间都知道 作者: 随侯珠 txt格式下载
  18. 微信小程序微信账号登录
  19. 卡巴斯基 2050.earth 源码分享——第一部分
  20. flex与grid响应式布局中的子容器为固定空间后的剩余空间,该元素容器不出现滚动条或者滚动条异常问题

热门文章

  1. 让计算成为公共服务,从ATF看阿里对世界创新的贡献
  2. sketchup草图大师关于模型导出法线问题等踩坑
  3. 监测HDD smart信息的脚本编写
  4. 机械臂的雅克比矩阵推导
  5. Flutter仿钉钉打卡日历
  6. 有哪些能学吉他的 App?这3款App让零基础也可以学吉他
  7. Python数据分析《爱情公寓5》中的蜕变和成长
  8. 模型预测控制(Model predictive control,MPC)
  9. 【控制control】机器人运动控制器----基于模型预测控制MPC方法
  10. 从零开始实现C++ TinyWebServer(三)---- 补偏救弊调试分析,日志系统来帮忙