复习编辑器之神Vim
, 顺便立个Flag,以后的verilog
都使用Vim
进行编写。 🙌
选择与替换
选择块内容:
如果使用的是GVim
,可以直接使用 鼠标进行拖动,GVim
会自动进入Visual Mode
。如果在拖动鼠标的同时按住键盘的Alt
键,Vim
就会进入Visual-Block
模式,在这个模式下可以进行块选择。
" 快速选择段落内容
vip
" 选择 { ( [ 的内容
vi(
" 选取上一次选择的区域, 正常模式下
gv
在Visual-Mode
中选择需要的内容后就可以使用d x y p
等命令对选中的内容进行相关操作。
搜索关键字:
当需要在Vim
中搜索关键字时,在normal mode
下使用/name
进行搜索。
搜索时可以连接标识符,指定搜索的范围,是否大小写敏感等。具体表示符如下:
/g
表示在全局范围内进行操作/c
表示在替换操作时需要进行确认/I
表示需要在搜索时对关键字的大小写敏感
指定搜索范围:
:%
代表整个文件: i, j
搜索范围是 第 i 到 j行:.,+x
搜索范围是从当前行和接下来的两行
搜索关键字的一个重要作用就是在/
前面加上s
,就可以进行关键字的搜索替换,具体格式为:s/name/new_name
例如,在写testbench
的时候需要从原模块中复制输入输出的定义后将input
替换为reg
,将output
替换为wire
类型。可以使用如下命令进行修改替换:
" 全局范围内进行搜索 input 替换为 reg,% 代表整个文件,g 代表全局范围内,c代表在替换时需要进行逐项确认
:%s/input/reg/gc
" 在 i,j 行之间进行搜索替换
:i,js/input/reg/gc
" 在选中的内容中进行搜索替换
:<,'>s/input/reg
" 从当前行开始,向下两行的范围内进行搜索替换,点代表当前行
:.,+2/s/input/reg
" 在全局范围内对已经选择(搜索)到的关键字进行替换
:%s//new_name/gc
在搜索完成后可以使用noh
取消搜索结果的高亮显示。
批量操作
在多行添加内容:
在例化代码模块时,可以快速从源文件中将模块复制过来并将参数名统一添加.
和括号()
。
在列选择模式下选择第一列,按下 I
,输入需要插入的内容后,按下<ESC>
键后就可以完成批量添加。下面就是将module
改为例化模块的方法。
宏功能
宏功能可以将需要重复执行的动作记录下来,然后批量执行。
命令 | 模式 | 说明 |
---|---|---|
qx | Normal Mode | 录制宏 到 x,x可以是 abcde...等等 |
q | Normal Mode | 停止录制 |
@x | Normal Mode | 运行宏,可以在按之前输出数字指定重复执行的次数 |
快速对齐
使用Vim-Plug安装Easy-Align插件,并在.vimrc
里面加上
xmap ga <Plug>(EasyAlign)
nmap ga <Plug>(EasyAlign)
配置好后再Visual-Mode
下选择需要对齐的代码,按下 ga
+ 标识符
就可以快速对齐代码了。
例如需要对齐一些localparam
的声明,再使用鼠标选择之后,按下ga
+ **
+ <SPACE>
就可以快速以空格为中心将代码进行对齐。
可以在输入对齐字符之前按下<Left>
或者<Right>
选择左对齐或者右对齐。
快速移动
单词之间的移动
在Vim
中使用光标移动到一个单词后,在Normal Mode
下按下*
,Vim
就会自动高亮所有匹配的单词,再次按下*
,指针就会跳转到下一个一样的单词,按下#
可以跳转到上一个单词。
使用~~
可以跳转到上一个编辑的位置。
! 注意:这里是~~,~代表对的单词的大小写进行替换。
配对括号之间的跳转
在一个括号上按下 %
可以快速跳转到它匹配的另一半的位置。
文件内跳转
" n 为行数
:n
" 跳转到文件头
gg
" 跳转到文件尾
G
行内的跳转
" 下一个单词的第一个字母
w
" 上一个单词的第一个字母
b
" 当前单词的最后一个字母,如果已经在最后一个字母,则会跳转到下一个单词的最后一个字母
e
" 上一个单词的最后一个字母
ge
" 跳转到行首
0
" 跳转到行尾
$
Easy-Motion插件
使用Vim-Plug安装Easy-Motion插件,并在.vimrc
里面加上
nmap s <Plug>(easymotion-overwin-f2)
在Normal-Mode
中按下s
并输入想要跳转到地方的头两个单词,并按下屏幕中提示的字符就可以将指针快速地移动到指定为位置。
例如我当前的光标再else
的位置,我想快速跳转到 clk_baud
位置处。在Normal Mode
下按下 scl,并根据提示按下s
键,光标就跳转到了指定的位置。
代码折叠
可以设置折叠的模式,这里直接设置为marker
模式,且折叠标记设置为//BEGIN
和//END
。
:set foldmethod=marker
:set foldmarker=//BEGIN,//END
命令 | 模式 | 说明 |
---|---|---|
zc | Normal Mode | 折叠当前块 |
zo | Normal Mode | 展开当前块 |
zC | Normal Mode | 折叠所有可以折叠的块 |
zO | Normal Mode | 展开所有可以折叠的块 |
不常用操作
命令 | 模式 | 说明 |
---|---|---|
CTRL-O | Normal Mode | 打开上一个最近打开的文件 |
CTRL-I | Normal Mode | 打开下一个最近打开的文件 |
Ctrl-u | Normal Mode | 向下移动半个屏幕 |
Ctrl-d | Normal Mode | 向上移动半个屏幕 |
分屏操作
命令 | 模式 | 说明 |
---|---|---|
:vs | Normal Mode | 横向拆分窗口 |
:sp | Normal Mode | 纵向拆分窗口 |
C-w w h j k l | Normal Mode | 切换当前窗口,w 是循环切换 |
C-w q | Normal Mode | 关闭当前窗口 |
Buffer操作
命令 | 模式 | 说明 |
---|---|---|
:ls | Normal Mode | 列出当前所有打开的文件 |
:bn | Normal Mode | 跳转到下一个编辑文件 |
:bp | Normal Mode | 跳转到上一个打开的编辑文件 |
其他
使用--cmd
可以在shell
里面调用vim
的命令,从而和shell
进行结合并自动化完成某些操作
vim --cmd PluginInstall