前言
写这篇博客的背景是我实在忍受不了每次换新的开发机器都得费好大的劲来完全恢复以前的环境, 而且,我平常喜欢搜集各种有用的工具、好看的主题,字体这些,如果零零散散的记录,大概率会忘记或者记不得某些细节。
所以,最后期望达到的是能够使我每次在新机器上搭建环境只需要看这一篇文章就可以了。因此这里会记录:
- 帮助提升开发效率的小工具
- 好看的字体、主题
- 配置某些环境的要点及注意事项
🥀 到目前为止,我还未发现一种方式能够完全达到“一键式布置”,这也不是本文的目的。 付出至少半天的时间的一定的,希望未来能发现一种好的方法。
字体
Fira Code
这款字体适合做编程字体,蛮好看的。我在 vscode 和 terminal 下都使用了这款字体。
详情及安装参考github
霞鹜文楷
开源的中文字体,做博客、PPT 不错。
详情及安装参考github
vscode
vscode的所有配置通过其内置的sync功能实现, 目前用的是Github账号同步。
Command+Shift+o
或者搜索框中输入@ ==> 搜索outline- 搜索框中输入% ==> 全局快速搜索quick search
vscode多个窗口群组(Group)可以有两种排列方式:自由排布和放大某一个。 使用Toggle Editor Group Sizes
命令来切换。
vscode常用快捷键
Remote SSH 连接失败
使用Remote SSH插件总是连接失败,但终端使用指令可以连接成功。这种情况下是插件挂了,解决方法参考链接:
- VS Code Remote SSH Connection not working - Stack Overflow
- 删除服务器上的
~/.vscode-server
目录,并重试连接
Release 1.88.0
- 内置终端中按
Ctrl+Alt+R
执行历史命令。选择时按住Alt可以不自动执行 // #MARK:
在minimap中标记region- Quick search中按
Command+⬆️/⬇️
来在一次跳转文件
Ubuntu2004源
新版本的Clangd
Clangd用15+才能用vscode的inlay hint功能。
获取签名
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
添加源地址到/etc/apt/sources.list
, 修改完后别忘了sudo apt update
# 15, 后缀可以改成你需要的版本号
deb http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main
deb-src http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main
新版本的Vim
Vim 8+才有pack插件管理
sudo add-apt-repository ppa:jonathonf/vim
安装和升级node
sudo apt install npm
npm install -g n
sudo n stable
下载完成后 如果发现 node -v
仍然是之前的版本,根据不同的 shell 版本执行 hash -r
或者 rehash
即可。
终端软件安装
源替换 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
sudo apt install python3-pip
sudo apt install tmux
sudo apt install fzf
sudo apt install zsh
sudo apt install cmake # low version?
sudo apt install tldr
sudo apt install coreutils # tar包含在其中
# CLI 代码高亮
sudo pip3 install pygments
# hstr 是一款可以轻松查看、导航和搜索历史命令的小工具,它支持 Bash 和 Zsh。
# hstr 配置:https://blog.csdn.net/easylife206/article/details/107925366
sudo add-apt-repository ppa:ultradvorka/ppa && sudo apt-get update && sudo apt-get install hstr
# brew install hstr # MACOS
shell
zsh
oh-my-zsh
oh-my-zsh可以看作对zsh的配置文件做一层抽象,使配置更方便。 一键式安装:
sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"
zsh默认的主题进入git目录下会比较卡,取消命令前缀显式git分支可以解决。 我的方案下默认就没有展示分支。
OMZ 插件下载
# zsh-syntax-highlighting
# 高亮语法,输入正确语法会显示绿色,错误的会显示红色,实时检查语法
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# zsh-autosuggestions
# 命令补全提示,我愿称之为OMZ插件之王
# 以下两个地址都可以
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://gitee.com/phpxxo/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
OMZ 插件安装
OMZ配置文件.zshrc
中写入如下,重新source之后即可生效。
# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(
git
zsh-syntax-highlighting
zsh-autosuggestions
rand-quote
)
OMZ 插件参考博客
- oh my zsh插件安装详细教程及常用插件 宝可梦说话
- mac上使用oh my zsh有哪些必备的插件推荐? git缩写、🐄说话
ssh 密钥
ssh-keygen -t rsa -C "cnwanglu@icloud.com"
tmux
tmux 在远程开发时比较有用,解决了以下几个痛点:
- ssh连接主机不稳定,在休眠或者网络波动时经常断开,以前进入的目录或者vim打开的文件就需要重新做。而tmux是CS架构,只要远程主机上的server不死,永远可以重新连接并恢复到之前的窗口。甚至,tmux提供了将现场保存到本地文件中的功能。在远程主机重启后,也可以从文件中恢复现场。
- ssh连接主机实现多窗口麻烦,一般需要在终端软件(如XShell,iterms)中开多个标签,多次连接ssh。tmux内置多窗口的实现方案,不依赖连接的终端,窗口创建、切换等方式可以做到统一。
问题:调整显示尺寸时,tmux未重新绘制窗口
有时候我们在调整终端软件的显示大小时,发现tmux的显示窗口并没有跟着变化,而是在多余的串口中显示一些点。就像下面图片展示的那样。
原因在于该会话有多个绑定的连接,而tmux将窗口绘制为所有连接中最的最小尺寸。最简单的方法是在连接的时候将其他客户端从会话中断开:
tmux attach -d
reference
科学上网
Clash 最完整的教程,包括下载和安装使用:https://docs.gtk.pw/contents/macos/cfw.html#%E4%B8%8B%E8%BD%BD%E5%AE%89%E8%A3%85
Clash for Mac
直接下载桌面版,镜像下载地址:https://github.com/clashdownload/Clash_for_Windows/releases
Clash for Linux
目前clash的作者已经删除跑路,但是已经发布的版本还是可以正常使用的。这一章节介绍如何在Linux上用命令行配置Clash。
首先需要准备好一些文件:
- clash在linux中的命令行可执行文件,目前这里还可以下载 https://github.com/Kuingsmile/clash-core/releases, 去下载clash-linux-amd64-v1.18.0.gz
- Country.mmdb为全球IP库,可以实现各个国家的IP信息解析和地理定位,没有这个文件clash是无法运行的。 但目前版本的clash有点问题,不会自动生成MMDB文件,所以需要使用命令行下载。去这个地方或者这个地方看看
- config.yaml为clash的代理规则和clash的一些其他设置。代理规则不需要我们自己编写,通过订阅地址直接下载即可。
此处将订阅链接粘贴进双引号中间。注意不要删除双引号,不要删除空格。
wget -O ~/.config/clash/config.yaml "订阅链接"
。或者,如果你有clash的其他客户端,可以由已有的配置导出。
下载上面的文件,就可以准备好安装了:
- 创建
~/.config/clash/
,并将config.yaml和Country.mmdb放进去,如果已经存在请忽略mkdir ~/.config/clash/ mv Country.mmbd ~/.config/clash/ mv config.yaml ~/.config/clash/
- 解压
clash-linux-amd64-v1.18.0.gz
,并将可执行文件放到一个合适的位置gunzip clash-linux-amd64-v1.18.0.gz chmod +x clash-linux-amd64-v1.18.0.gz mv clash-linux-amd64-v1.18.0 ~/tools/clash-v1.18.0 cd ~/tools/
- 运行clash可执行文件,如果成功运行应该可以看到以下LOG
$ ./clash-linux-amd64-v1.18.0 INFO[0000] Start initial compatible provider 故障转移 INFO[0000] Start initial compatible provider 自动选择 INFO[0000] Start initial compatible provider 大机场 Big Airport INFO[0000] inbound mixed://:7890 create success. INFO[0000] RESTful API listening at: 127.0.0.1:9090
到此,clash就可以正常运行了,由于我的订阅地址有3条规则,所以会有3条Start initial compatible provider xxxx。
inbound mixed://:7890 则代表已经开启了http(含https)和socks代理,只要服务器内有软件流量通过7890这个端口,流量都将进入clash从而被代理。(但有些不支持设置,后面会说如何使用全局代理)
RESTful API listening at: [::]:9090代表clash已经开启了ui控制面板,是的,Linux的clash有可视化控制面板。
验证科学上网
根据我们之前前台运行可得知,默认是监控了自己的7890端口,验证方式可以通过curl
向google发送一个请求看是否能正常返回。
curl --proxy 127.0.0.1:7890 www.google.com
返回正常 Google成功返回数据,代表7890端口代理正常,clash运行正常。注意目前必须手动指定代理的地址和端口,后面会介绍启用全局代理。
Clash全局代理
可以添加这个配置到你的.bashrc
/.zshrc
中,使得终端的所有请求都走代理。
export http_proxy=127.0.0.1:7890
export https_proxy=127.0.0.1:7890
这里只设置了http和https,初次之外,还可代理其他协议。
可以做成一个sh命令,当想临时关闭科学上网的时候执行unproxy。
function proxy() {
export http_proxy=http://127.0.0.1:7890
export https_proxy=$http_proxy
echo -e "proxy on!"
}
function unproxy(){
unset http_proxy https_proxy
echo -e "proxy off"
}
验证全局代理配置成功只需要再执行一次curl
即可,这次无需手动指定代理。
curl www.google.com
将Clash作为一个服务
使clash一直运行在前台会占用一个终端,而且总感觉不是很优雅,更好的方法是将clash作为一个服务来操作。
- 在
/etc/systemd/system/
目录新建一个clash.service文件[Unit] Description=Clash service After=network.target [Service] Type=simple User=root ExecStart=这里写你的clash运行的绝对路径(本文中的路径是`~/tools/clash-v1.18.0`) Restart=on-failure RestartPreventExitStatus=23 [Install] WantedBy=multi-user.target
- 之后就可以用systemctl系列命令来确认是否启用成功:
systemctl status clash 查看clash服务 systemctl start clash 启动clash服务 systemctl stop clash 停止clash服务 systemctl restart clash 重启clash服务 systemctl enable clash 设置开机自启clash服务 systemctl daemon-reload 如果修改了clash.service文件,需要此命令来重载被修改的服务文件
Reference
- Linux中安装Clash并且实现全局代理(纯命令行)
- https://github.com/Kuingsmile/clash-core/releases
- clash-for-linux
- Ubuntu配置 命令行Clash 教程
- Clash can’t initial MMDB of Country.mmdb
MacOS 环境配置
XCode
XCode下载官方网站很慢,跑不满带宽,通过这个下载工具可以跑满带宽XCodeApp,使用文档可以参考这个:一分钟下载最新 XCode - 知乎
如果使用如下命令检测安装是否成功:
$ xcodebuild -version
Xcode 12.5.1
Build version 12E507
brew
替换清华源
参考:homebrew | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
- 加入zshrc
export HOMEBREW_API_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api"
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"
export HOMEBREW_PIP_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple"
- 执行
for tap in core cask{,-fonts,-versions} command-not-found services; do
brew tap --custom-remote --force-auto-update "homebrew/${tap}" "https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-${tap}.git"
done
brew update
其他指令
# 检查包的依赖是否安装好
brew info <package>
# 检查包的依赖都有哪些
brew deps <package>
(42 封私信 / 58 条消息) brew的各种疑问? - 知乎
Windows下迁移WSL
WSL2目前已经相当好用了,在对性能要求不极致的场景下用WSL开发非常舒服。
迁移WSL到别的位置/别的机器还是比较方便的,也有人写了脚本来做这些,它是针对迁移到其他硬盘位置的,所以我这次还是自己手动做一遍,原理都是相同的。
步骤
1. 关闭WSL
# 检查WSL是否在运行
wsl -l -v
NAME STATE VERSION
* Ubuntu2004 Running 1
# 关闭
wsl --shutdown
2. 导出WSL镜像
wsl --export Ubuntu2004 D:\Ubuntu2004_202311.tar
3. 注销原系统(可选)
wsl --unregister Ubuntu2004
4. 将镜像压缩文件复制到新机器/新位置
如果是新机器,还需要重新配置好WSL,开启一些选项:
控制面板->程序->启用或关闭 windows 功能,开启 Windows 虚拟化和 Linux 子系统(WSL2)以及Hyper-V。
勾选完成后,Windows11 会自己下载些东西,并提示你重启。等电脑彻底重启完以后,进行后续操作。
5. 在新机器上导入镜像文件
wsl --import Ubuntu2004 D:\wsl\Ubuntu2004\ D:\Ubuntu2004_202311.tar
执行的时间比较长, 执行完后至此WSL就迁移完毕了,剩下的是一下配置的修正。
6. 配置
设置默认用户
这样移过来现在登陆就是root,我们需要进行一些配置:
Set your default user inside your distro by adding the following configuration to your /etc/wsl.conf.
[user]
default=loo
If the file doesn’t exist create it manually. Then exit your distro, terminate it (wsl -t Ubuntu2004
) and start it again.
设置默认distro
wsl -s Ubuntu2004
这样完成后,所有的一切就OK了。
Reference
Linux组织Dotfiles
Linux开发环境中的许多软件都由配置文件,重新捣鼓一台新环境时去重新设置这些配置文件是非常复杂的一件事情,所以我想着用一种统一的方式进行管理。
- vimrcs 用单独的子仓库管理
- vim 插件使用单独的子仓库管理
- 其他的配置文件暂时都使用mackup管理
不将vim插件也归于
mackup
管理的原因是: 我的.vim/pack/xx/
下的所有插件都是通过submodule的方式管理,这样有利于维护和更新。但是在mackup的管理方式中是将整个pack/
的内容拷贝过来,这就与submodule的理念冲突了。此时去改mackup的实现不如将vim的插件系统单独进行维护更容易。
新环境恢复Dotfile
- vimrcs的恢复方法: wangloo/myvimrcs
- vim插件的恢复方法: wangloo/myvimpack
- 其他配置文件,教程参考:wangloo/dotfiles