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失效)

image

2.3 保存后关闭,查看效果

image

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

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


三、方法二, 创建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 上面的行
image

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


六、增加显示行号、保存退出

某些情况下,输入内容可以快捷键,但是还想输入前显示文本行号,输入完成后自动保存后退出

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 : 要保存的文件名,如果存在可以不写

image


七、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



posted @ 2025-08-17 12:06  悟透  阅读(42)  评论(0)    收藏  举报