Linux vi/vim 自定义输入模板内容main函数
前言全局说明
vi/vim大家都不陌生,在linux下的文本编辑器,如果经常在编辑文本,或写代码的时候有些固定的内容,再每次新建文件时都要输入一遍,麻烦又浪费时间。
最近在看 “华清远见-创客学院” 的嵌入式 C语言课程时,小美老师新建文本后,瞬间就有了 main 函数语法框架,老师说是用的 vi mf快捷键。
然后,网上搜了篇文章看看原理,原来是用 vi/vim 的 map 映射键盘功能,模拟手操作自动写入
一、说明
1.1 环境:
CentOS Linux 7 (Core)
Kernel 3.10.0-1127.el7.x86_64 on an x86_64
二、方法一, 创建main函数模板
2.1 创建 .vimrc
在想要创建main函数模板用户的Home目录下,找到 .vimrc 打开(没有就创建一个)
vim ~/.vimrc
2.2 添加如下快捷内容
以下为了换号,是每输入一行就退出,再进入输出第二行,比较繁琐。(写出来是为了让知道可以这样写)
map mf i#include <stdio.h><Esc><Esc>oint main(int argc, char *argv[])<Esc>o{<Esc>oreturn 0;<Esc>o}<Esc>2ko
map: 代表映射键盘内容(可以有多个,但定义快捷键不能一样)
mf: 定义快捷键, 可以指定你想要的,如有相同则取最后一个同名内容(盲猜 mf 是 main function 的意思)
i: 就是我们平时要输入时按的i 的动作
<Esc>: 就是我们平时要输入时按的键盘左上角 ESC 的动作。还可以作为分隔符使用。例如:#include <stdio.h><Esc><Esc>oint main 如果不写<Esc>那么 int前的o 是内容还是o插入命令呢?不写会被识别成内容,输出结果是 oint 了
<Esc>2ko: 光标向上移动2行,不写默认最后一行。(<Esc>不可缺少,否则2ko失效)

2.3 保存后关闭,查看效果

在下图界面,直接 mf 两个键

就会自动插入.vimrc 指定的 mf 内容

三、方法二, 创建main函数模板
3.1 打开.vimrc
(按上述,略)
3.2 添加如下快捷内容
map mf i#include <stdio.h><CR><CR><CR>int main(int argc, char *argv[])<CR>{<CR><Tab><CR><Tab>return 0;<CR>}<CR><CR>
四、map映射,使用模板
经过上面,大家是否有发现 main 函数不管开发什么程序框架是不变的,
但是 不同项目,include 的头文件是会增加的,按照上面的写法,
我们可能要写多行 map ,如果写了多个 map 这时项目变化,
又需要在main里增加其他内容,那么又要每行main里加入需要内容,更繁琐,这里就可以用到 noremap
4.1打开.vimrc
(按上述,略)
4.2 添加如下快捷内容(换行退出版)
noremap io i#include <stdio.h><Esc>o<Esc>
noremap im iint main(int argc, char *argv[])<Esc>
map mf io<Esc>o<Esc>imo{<Esc>oreturn 0;<Esc>o}<Esc>2ko
noremap: 定义一个map映射模板
io: 和上面 mf 一样起个名字(io 盲猜是去 stdio.h 的 io)
im: 如上io所述(im 盲猜是 int main 首字母)
map 里接着就引用 io 和 im
4.3 添加如下快捷内容(换行<CR>版)
noremap io i#include <stdio.h><CR><CR><CR>
noremap im iint main(int argc, char *argv[])<CR>
map mf io<ESC>i<ESC>im{<CR><Tab><CR><Tab>return 0;<CR>}<CR><CR>
注意:
经测试 map mf io<ESC>i<ESC>im 中的 <ESC> 换成 <CR> 输出会失效
五、光标控制
默认情况下,模板输入后,光标是在最后一行,使用<Up>就可以让光标移动到指定行,还可以使用 2ko 来移动光标,上面使用了不赘述。
noremap io i#include <stdio.h><CR><CR><CR>
noremap im iint main(int argc, char *argv[])<CR>
map mf io<ESC>i<ESC>im{<CR><CR><Tab>return 0;<CR>}<CR><CR><Up><Up><Up><Up><Tab>
<Up>写在什么位置不影响,光标都是从最后一行向上的
下图,光标移动到指定行,就是 return 0 上面的行

下图,未使用 <Up> 时,光标默认在最后一行

六、增加显示行号、保存退出
某些情况下,输入内容可以快捷键,但是还想输入前显示文本行号,输入完成后自动保存后退出
map mf :set nu<CR>i#include <stdio.h><Esc><Esc>oint main(int argc, char *argv[])<Esc>o{<Esc>oreturn 0;<Esc>o}<Esc>2ko<Tab><ESC>:wq demo.c
:set nu<CR>: 是显示行号
<ESC>:wq: 是退出 i 编辑模式,并输入:wq
(这里只是让输入了:wq,手动回车才能退出vi/vim , 如果想自动保存,改成 :wq<CR>即可)
demo.c : 要保存的文件名,如果存在可以不写

七、map 对应键盘表
| 键 | 说明 | 备注 |
|---|---|---|
| <k0> - <k9> | 小键盘 0 到 9 | |
| <S-...> | Shift+键 | |
| <C-...> | Control+键 | |
| <M-...> | Alt+键 或 meta+键 | |
| <A-...> | 同 <M-...> | |
| <Esc> | Escape 键 | |
| <Up> | 光标上移键 | |
| <Space> | 插入空格 | |
| <Tab> | 插入Tab | |
| <CR> | 回车<Enter> | |
七、扩展阅读
以上只是简单介绍vi/vim映射使用,还有很多其他功能,大家自己去看看
map映射:https://blog.csdn.net/lianshaohua/article/details/108388945
键映射、缩写和用户定义的命令:https://yianwillis.github.io/vimcdoc/doc/map.html
https://vimcdoc.sourceforge.net/doc/map.html
https://vim80.readthedocs.io/zh/latest/basic/map.html
免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。
参考、来源:
“华清远见-创客学院”2024嵌入式 C语言课程小美老师:Level-01/Day02/D2-06 运算符一.mp4
https://blog.csdn.net/weixin_61180235/article/details/126141614 (noremap )
https://blog.csdn.net/qq_44394562/article/details/125820429
浙公网安备 33010602011771号