在 OpenWrt 中配置使用 vim 代码高亮和文件比较编辑

安装使用开源路由器固件 OpenWrt 最舒服的感觉是平常使用 Linux 的经验可以借用了。OpenWrt 上默认安装的是精简版本的 vim(其实就是 vi,301kB)。但是软件库中是有 vim-full(831kB)甚至 vim-fuller(2741kB)的。这列举的软件包的大小都是当前值,仅仅用作大概的比较。而依赖包都是一样的,包括 libc 和 libncurses。考虑到路由器上磁盘还有不少剩余,就果断安装了 vim-fuller 以方便使用代码高亮和文件比较功能。

更新vim-fuller安装后的 /overlay/upper/usr/share/vim有 10+MB,搞得后面再安装别的应用很困难,所以还是用 vim-full 吧,安装后的 /overlay/upper/usr/share/vim只有 4.0KB。不过就没有代码高亮了。

安装当然是很简单了,

opkg update && opkg install vim-full diffutils

实际上安装过程还带来了 terminfo 这个包。虽然不用,但是也不嫌它占地儿,反正才 6kB 大小 :p 。

安装了完全版本的,那么代码高亮已经默认启用了,下面就是开启行号显示和启用文件比较编辑功能了。等等,如果试了发现没有代码高亮,不要急,再试试这个 /usr/bin/vim 指令。如果没有问题,那就说明在路由器重启之后就会正常了。

然后 vim 的配置文件是 /usr/share/vim/vimrc,如果需要就去编辑它吧。我的感觉是不需要编辑,默认的已经够了。但是为了后面使用文件比较的时候更方便,还是打开其行号显示功能更好。编辑那个配置文件,将最后两行前面的 " 去掉(就是取消注释)。如下所示,

" Uncomment out for line and/or relative numberig
"set number
"set rnu

改成,

" Uncomment out for line and/or relative numberig
set number
set rnu

当然可以直接用下面的 sed 指令来完成这种简单任务,

sed -i 's/"\?set number/set number/' /usr/share/vim/vimrc
sed -i 's/"\?set rnu/set rnu/' /usr/share/vim/vimrc

启用文件比较编辑就比较简单了。先看看是否有 vimdiff 这个指令,

which vimdiff

如果没有咱就给创建一个。这个小窍门是我从 OpenWrt 的 Issue 列表上学来的。虽然系统已经具有了这样的功能,但是还差了个可执行文件。只要建立一个 vimdiff 的软连接就可以了,

ln -s /usr/bin/vim /usr/bin/vimdiff

比如升级软件包之后比较配置文件是否需要修改,

vimdiff /etc/config/luci /etc/config/luci-okg

如果 vimdiff 不能进行比较编辑的话,提示找不到 diff 命令,就就是 diffutils 软件包每安装好。参考这里

最后,可以将文件 /usr/share/vim/vimrc/usr/bin/vimdiff 加入到系统升级不被删列表里面(Web 界面,System,Backup / Flash Firmware,Configuration)。这样在升级系统的时候就会被保留了。当然导出配置文件的时候这些也会被导出。©

本文发表于水景一页。永久链接:<https://cnzhx.net/blog/setup-vim-in-openwrt/>。转载请保留此信息及相应链接。

2 条关于 “在 OpenWrt 中配置使用 vim 代码高亮和文件比较编辑” 的评论

  1. 引用通告: 升级路由器固件 OpenWRT 18.06.5 到 19.07.0(更新 19.07.3) | 水景一页

  2. 引用通告: 路由器更新 OpenWrt 固件一般步骤 | 水景一页

雁过留声,人过留名

您的电子邮箱地址不会被公开。 必填项已用 * 标注

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南
您可以在评论中使用如下的 HTML 标记来辅助表达: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>