Table of Contents
前言
工作关系,公司提供了一台 Windows 电脑进行开发,本来是用 Macbook 的,但懒得上下班来回背,于是就得在 Windows 上配置一下开发环境。
这些是我需要用到的一些环境和工具:
NodeJS
, Git
, Emacs
, Firefox
, Chrome
, 一个好用的终端
, 代理工具
代理工具
下载 2dust/v2rayN,然后配置即可。
一开始没有用代理,访问 GitHub 可能比较慢,以后考虑找个 U 盘存储一下, 避免到时访问不了 GitHub 的情况。
Emacs & 环境
最开始的时候,是直接下载 Windows 版本的 Git,NodeJS,Emacs,然后用 git bash 作为终端。
但是在 Windows 下使用终端实在很别扭,Windows 下的路径和 MacOS,Linux 的不同,不习惯。
之后了解到 WSL (Windows Subsystem for Linux), 可以通过它在 Windows 上装一个 Linux 子系统。
只要安装一个 Ubuntu 或者自己熟悉的 Linux 发行版,就能回到 Linux 那样的命令行环境了。
Windows Terminal
WSL 文档中推荐搭配 microsoft/terminal 使用,相比于 Powershell,git bash,确实好用很多。
它支持了多个 tab,选择不同的 Profiles, 定制主题,字体等。
安装字体
参考 How to install Powerline fonts in Windows,步骤如下:
- 到 powerline/fonts 上,点击克隆的按钮,下载字体 zip 包,下载后解压 zip 包
WINDOW KEY + X
选择Windows PowerShell(Admin)
, 然后 cd 到解压的 zip包中.../fonts-master/fonts-master
目录- 执行
Set-ExecutionPolicy Bypass
设置可执行权限,然后执行.\install.ps1
安装字体, 安装完成后,执行Set-ExecutionPolicy Default
将权限重置回去
配置 Terminal
- 将 Ubuntu 作为默认 Profiles
- 设置 Ubuntu Profiles 的字体为 Fira, Nerd 之类的字体
按键绑定
Windows 有一些默认的全局绑定键,Terminal 里也有一些,按自己需要禁用。
目前我的键盘可以直接切换 Ctrl 和 Caps Lock ,但可能有些键盘不支持,可以下载 PowerToys 映射一下。
WSL 和 Windows 之间的复制粘贴
Windows -> WSL
Windows 上 Ctrl-C 复制,然后可以在 WSL Ctrl-V 粘贴,但是因为我使用 Emacs,Ctrl-V 在 Emacs 中是常用的翻页功能。
因此禁用了 Ctrl-V 作为粘贴快捷键,改为通过 Terminal 的 command 去粘贴:
在 Ternimal 中 Ctrl+Shift+P
呼出 command panel,然后找到 paste
命令执行即可。
WSL -> Windows
同样,在 Terminal 中用 Emacs,选中文字复制没法传递到 Windows 的剪贴板, 目前还没找到方便的操作。
当前的解决办法:
- Emacs 中选择内容,然后写入到一个文件
~/copy.txt
- 执行命令
cat ~/copy.txt | clip.exe
把 copy 的文本写入剪切板 (可以绑定 alias 方便调用)
将以上流程封装为函数:
(defun spike-leung/wsl-copy () "Copy region to windows clipboard." (interactive) (progn (write-region (mark) (point) "~/copy.txt" nil nil nil nil) (shell-command "cat ~/copy.txt | clip.exe") ))
之后有时间把这个操作添加到 Emacs 的复制钩子里,这样 Emacs 复制时就能复制到 Windows 上了。
Ubuntu 环境配置
systemd
配置过程中,提示 systemd 不可用,导致一些安装无法进行。
参考 WSL: System has not been booted with systemd as init system (PID 1) 解决:
# Install git sudo apt install git # Run the script git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git cd ubuntu-wsl2-systemd-script/ bash ubuntu-wsl2-systemd-script.sh # Enter your password and wait until the script has finished
NodeJS
下载 nvm 进行配置:
# install curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash # 在 .zshrc 或者 .bashrc 中加入配置 export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
Emacs
默认 apt 安装的是 Emacs 26 的版本,但是我的配置需要 27 以上
sudo add-apt-repository ppa:kelleyk/emacs sudo apt update && sudo apt upgrade sudo apt install emacs27 # Uninstall sudo apt autoremove --purge emacs27
安装 gcc,用于编译 emacsql:
下载自己的 emacs.d 配置,切换成 windows 的分支,注意要安装子模块。
如果需要安装最新的 Emacs 版本,可以参考 How to Install Emacs on Ubuntu:
# install sudo apt-add-repository ppa:ubuntu-elisp/ppa sudo apt update && sudo apt upgrade sudo apt-get install emacs-snapshot # uninstall sudo add-apt-repository --remove ppa:ubuntu-elisp/ppa sudo apt remove emacs-snapshot
- org-mode 打开链接, WSL 中找不到浏览器
;;; Package --- Summary ;; init-wsl ;;; Commentary: ;;; Code: ;;; https://adam.kruszewski.name/2017-09-16-emacs-in-wsl-and-opening-links.html (let ((cmd-exe "/mnt/c/Windows/System32/cmd.exe") (cmd-args '("/c" "start"))) (when (file-exists-p cmd-exe) (setq browse-url-generic-program cmd-exe browse-url-generic-args cmd-args browse-url-browser-function 'browse-url-generic))) (provide 'init-wsl) ;;; init-wsl.el ends here
- 终端没有 GUI,因此一些 GUI 相关的显示会有些问题
- fringe: 左侧显示的一些标志消失了,flycheck 找不到错误标志,不过可以通过其他方式显示错误,虽然不那么直观,但能接受
碎碎念
相对在 Windows 里开发,通过 WSL 用 Ubuntu 进行开发,要舒服很多,一些命令执行起来更方便,速度也不慢。
不过仍然存在不少问题需要去解决,例如复制粘贴,还有不少的 Emacs 按键和其他软件似乎有冲突……
后面解决了再来更新文章 :)