后面有更新的话在gitee更新,本文不再更新, gitee链接
文章目录
- 一、keil编译_vimrc配置及说明
- 配置说明
- 二、vim一些快捷键记录
- 三、vim常用操作
- 字符串替换
- 多行操作
- 和win的剪贴板交换
- 重复上次操作
- 自定义宏操作
- 书签操作
- 大小写转换
- buffer(标签页)
- 四、语法检测和自定义关键字
- 五、一些vim学习资料和网站
- 参考
一、keil编译_vimrc配置及说明
快捷键映射:
- 前缀键+kb :编译
- 前缀键+kr :重新编译
- 前缀键+kd :下载
ps:默认前缀键为 '\
'键,且有时间限制,要按快点,新手注意。。。
ps2:该配置重载_vimrc无效,需要重新打开gvim
ps3:前缀键也可以再前面加数字以多次操作,在配合Tagbar使用时很有效
"-----------------------------keil------------------------------
function MakeKeilTarget(options)
let l:target = ''
let l:target51 = ''
wa
echo '当前目录:'expand('<sfile>:p')
"-------------------------MDK-------------------------
if !empty(glob('*.uvprojx'))
let l:target = glob('*.uvprojx')
elseif !empty(glob('../*.uvprojx'))
let l:target = glob('../*.uvprojx')
elseif !empty(glob('../../*.uvprojx'))
let l:target = glob('../../*.uvprojx')
endif
"-------------------------8051-------------------------
if !empty(glob('*.uvproj'))
let l:target51 = glob('*.uvproj')
elseif !empty(glob('../*.uvproj'))
let l:target51 = glob('../*.uvproj')
elseif !empty(glob('../../*.uvproj'))
let l:target51 = glob('../../*.uvproj')
endif
if !empty(l:target)
execute ':silent !uv4 '.a:options.l:target.' -j0 -o "\%TEMP\%/mdk_log.txt"'
"execute ':!uv4 '.a:options.l:target.' -o "\%TEMP\%/mdk_log.txt" && type "\%TEMP\%\mdk_log.txt" && pause'
execute ':silent !type "\%TEMP\%\mdk_log.txt" && pause'
elseif !empty(l:target51)
execute ':silent !uv4 '.a:options.l:target51.' -j0 -o "\%TEMP\%/mdk_log.txt"'
"execute ':!uv4 '.a:options.l:target51.' -o "\%TEMP\%/mdk_log.txt" && type "\%TEMP\%\mdk_log.txt" && pause'
execute ':silent !type "\%TEMP\%\mdk_log.txt" && pause'
else
echo 'Target not found!'
endif
endfunction
"快捷键映射
nnoremap <leader>kb :call MakeKeilTarget('-b ')<CR>
"nnoremap <leader>kr :call MakeKeilTarget('-b -z ')<CR>
nnoremap <leader>kr :call MakeKeilTarget('-cr ')<CR>
nnoremap <leader>kd :call MakeKeilTarget('-f ')<CR>
配置说明
该配置在当前编辑目录及再向上两级目录,寻找uvproj/uvprojx文件,然后使用命令行编译。如果你的目录结构和这个不同,要自行在MakeKeilTarget()函数中添加你的相对路径。配置完_vimrc文件后需要重新启动gvim,使用:source
刷新配置文件可能不起作用。
重要:把keil的UV4.exe和gvim的gvim.exe文件所在目录分别添加到系统环境变量中,以确保编译指令可以正常执行和< win+r
>快捷启动正常,编译前需要打开keil先把对应的源文件加入工程!
配置参考了github上一个私人配置,功能添加了以下几点:
- 编译参数加了
j0
以不弹出GUI界面 - 增加了对
uvproj
文件搜索 - 打印了一次文件当前路径
- 编译前执行
wa
保存所有文件更改
测试正常:
二、vim一些快捷键记录
- <
CTRL+F
>:向下翻页 - <
CTRL+B
>:向上翻页 - <
CTRL+D
>:向下翻半页 - <
CTRL+U
>:向上翻半页 - <
CTRL+E
>:向下滚动 - <
CTRL+Y
>:向上滚动 - <
CTRL+ ]
> :函数跳转-依赖ctags - <
CTRL+ o
>:跳转到上次光标 - <
CTRL+ i
>:跳转到下次光标 - <
%
>:跳转到匹配括号 - <
=
>:格式化选中代码,可以最后一行留空,ggvG=
格式化当前文件 - <
ma
>:新建文件-依赖NERDTree,要在NERDTree列表里面操作 - <
gs
>:以并列会话打开文件-依赖NERDTree,要在NERDTree列表里面操作 - <
gf
>:打开头文件-依赖coc补全插件。 - <
gd
>:跳转到定义函数或变量或宏或枚举等类型定义-依赖coc补全插件。 - <
:!cmd
>:在cmd窗口执行命令"cmd
",可以快捷启动一些程序 - <
term
>:打开vim内置终端,exit
退出,进入中断默认是插入模式,按<C+\>+<C+n>
进入普通模式,以便于翻页查看 (按着<CTRL>
不放手,先按反斜杠
再按n
) - 一个窗口/光标调整快捷键配置,可以在前面加数字跳到指定窗口:
- <
leader + s
> :光标左移一个窗口 - <
leader + d
>:光标右移一个窗口 - <
leader + j
>:交换两个窗口位置 - <
leader + w
>:窗口宽度调制-10 - <
leader + e
>:窗口宽度调整+10 - 鼠标调整,直接拖拉边框位置即可
set mouse = a
nnoremap <leader>s <C-W>h<CR>
nnoremap <leader>d <C-W>l<CR>
nnoremap <leader>j <C-W>x<CR>
nnoremap <leader>w :vertical resize -10<CR>
nnoremap <leader>e :vertical resize +10<CR>
- 一个窗口会话保存快捷键配置
- <
F5
>:保存当前打开的会话布局到指定位置 - <
F6
>:调用保存在指定位置的窗口布局
注意:不能保存一些插件的窗口,有冲突的话最好先关闭插件,调用布局后再开启,这个也可以通过gvim工具栏快捷操作
noremap <F5> :mksession! ~/.vim/manual_session.vim<CR>
noremap <F6> :source ~/.vim/manual_session.vim<CR>
三、vim常用操作
字符串替换
:%s/a/b/g //文件内把字符串a替换成字符串b
多行操作
< CTRL + v
> 进入块操作选中要编辑部分,< I
> 用大写的 i 进入插入模式,< ESC
>完成,< d
> 删除选中块
和win的剪贴板交换
< "*y
> 可视模式下选中内容后操作,注意前面有引号
< "*p
> 普通模式粘贴
网上好像很多通过 +
寄存器复制粘贴,gvim8.2默认没有+寄存器,*
寄存器也可以,win剪贴板会更新这个寄存器,vim使用可视模式选中后 "*p
也可以更新这个寄存器
(neovim有+
寄存器)
:reg "查看当前寄存器里面内容"
:version "查看是否支持剪切板交换功能,clipboard前面是加号是支持,gvim8.2默认支持"
重复上次操作
< .
> :重复上次操作,本质是个特殊的宏,非常实用的功能,一个点。可以记录一个命令和所有插入模式操作
自定义宏操作
< q
>: 按 < q
> 加一个字母 x
开始录制,再按< q
>结束,可以记录期间命令和插入。< @ + x
>调用,x
为任意字母,前面可以加数字调用N次
< CTRL + a
> :数字加一,前面可以加数字调用N次
< CTRL + x
> 数字减一,前面可以加数字调用N次
书签操作
< m
> :按< m
>加小写字母为局部书签,< m
> 加大写字母为全局书签,注意书签记录后不会显示,可以用 :marks
命令查看当前书签。按< ` > 加书签字母打开书签位置,注意是数字1左边带波浪号那个点。
大小写转换
<gu
>:大写转小写,需要选中后按,或者在gu
后面跟范围,比如跟w
是单词转换到小写
<gU
>:小写转大写,用法同上
buffer(标签页)
这里并没有使用buffer插件,感觉默认就很好了
- 查看当前buffer列表,前面的标号即id号:
:ls
- 跳转到指定buffer,如
:b1
,即跳转到id号为1的buffer:
:buffer[id]
:b[id]
- 删除指定buffer,如
:bd1
,即删除id号为1的buffer
:bdelete[id]
:bd[id]
四、语法检测和自定义关键字
语法检查使用coc插件
五、一些vim学习资料和网站
参考
- 参考1:https://github.com/icandura/vimrc_with_keil
- 参考2:https://www.keil.com/support/man/docs/uv4cl/uv4cl_commandline.htm