Vim-算法-刷题环境配置

测试驱动的自动编译及运行刷题环境配置

前言

笔者大概从五年前大二开始接触 vim 编辑器,当时有很多关于两款“史前”编辑器 Vim 和 Emacs 的争论,对于一些较早前的极客一般分为 Vim 党、 Emacs 党 和其他。 笔者自开始接触 Linux 系统就学习的 Vim ,一直使用到现在,几乎所有 IDE 、游览器和笔记系统Logseq都开启 vim 模式,也算是一个 Vim 党。然而,笔者无心参与 Vim 和 Emacs 两款编辑器之争;很明显,现代大型项目的开发,已经几乎必须采取像 idea、clion、vscode 这些优秀的 IDE ;当下,笔者更多地使用 Vim(终端界面)编写一些算法题,这样既减少成熟 IDE 自动的补全机制对于笔者自身的驯化(经常知道某些函数,然而自己拼不对,非常依赖IDE智能提示),又能让笔者对 Vim 操作和 shell 脚本编程更加熟练;此篇博客介绍笔者在终端界面下使用 Vim 编写算法题搭建的自动化编译运行环境。

相关环境

系统:macOS Monterey 12.5.1
vim:MacVim 8.2
文件检测:fswatch 1.16.0

Vim 配置

参考此篇博客:2022 最新 Mac Vim 开发环境的部署与配置

效果如下图(点击图片可以放大查看):

Shell 脚本

通过 Shell 脚本来实现当自己编写程序时,保存完后,自动进行编译及运行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# fswatch.sh
FILE_NAME=$1
fswatch -0 ./${FILE_NAME} | while read -d "" event; do
	echo "[TIME: `date +"%Y-%m-%d \033[47;30m%H:%M:%S\033[0m"`]\033[0m This file ${event} has changed. \033[0m"
	echo "[TIME: `date +"%Y-%m-%d \033[47;30m%H:%M:%S\033[0m"`]\033[0m $ g++ -std=c++11 ${FILE_NAME} -o a.out"
	g++ -std=c++11 ${FILE_NAME} -o a.out
	if [ $? -eq 0 ]; then
		echo "[TIME: `date +"%Y-%m-%d \033[47;30m%H:%M:%S\033[0m"`]\033[0m \033[36m 编译通过! \033[0m"
		echo ""
		echo "[TIME: `date +"%Y-%m-%d \033[47;30m%H:%M:%S\033[0m"`]\033[0m $ ./a.out"
		./a.out
		if [ $? -eq 0 ]; then
		echo "[TIME: `date +"%Y-%m-%d \033[47;30m%H:%M:%S\033[0m"`]\033[0m \033[32m执行完成,通过! \033[0m"
		echo ""
		fi
	fi
done

通过在终端的另一个标签下执行:

1
./fswatch.sh template.cpp 

这样,每次对 template.cpp 文件进行修改并保存时,会自动触发 fswatch.sh 中编写的脚本,完成对程序的自动编译和运行。 该脚本的效果如下图(点击可以查看大图):

这样便可以愉快的刷题了,哈哈,加油!!!

问题

当在 Vim 进行一次保存时,fswatch 会触发两次,目前不清楚如何解决。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计