Skip to content

复习编辑器之神Vim, 顺便立个Flag,以后的verilog都使用Vim进行编写。 🙌

选择与替换

选择块内容:

如果使用的是GVim,可以直接使用 鼠标进行拖动,GVim会自动进入Visual Mode。如果在拖动鼠标的同时按住键盘的Alt键,Vim就会进入Visual-Block模式,在这个模式下可以进行块选择。

v
" 快速选择段落内容
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类型。可以使用如下命令进行修改替换:

v
" 全局范围内进行搜索 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改为例化模块的方法。

mutil-edit

宏功能

宏功能可以将需要重复执行的动作记录下来,然后批量执行。

命令模式说明
qxNormal Mode录制宏 到 x,x可以是 abcde...等等
qNormal Mode停止录制
@xNormal Mode运行宏,可以在按之前输出数字指定重复执行的次数

快速对齐

使用Vim-Plug安装Easy-Align插件,并在.vimrc里面加上

v
xmap ga <Plug>(EasyAlign)
nmap ga <Plug>(EasyAlign)

配置好后再Visual-Mode下选择需要对齐的代码,按下 ga+ 标识符就可以快速对齐代码了。

例如需要对齐一些localparam的声明,再使用鼠标选择之后,按下ga+ ** + <SPACE>就可以快速以空格为中心将代码进行对齐。

可以在输入对齐字符之前按下<Left> 或者<Right>选择左对齐或者右对齐。

easy-align

快速移动

单词之间的移动

Vim中使用光标移动到一个单词后,在Normal Mode下按下*Vim就会自动高亮所有匹配的单词,再次按下*,指针就会跳转到下一个一样的单词,按下#可以跳转到上一个单词。

使用~~可以跳转到上一个编辑的位置。

! 注意:这里是~~,~代表对的单词的大小写进行替换。

配对括号之间的跳转

在一个括号上按下 %可以快速跳转到它匹配的另一半的位置。

文件内跳转

v
" n 为行数
:n
" 跳转到文件头
gg
" 跳转到文件尾
G

行内的跳转

v
" 下一个单词的第一个字母
w 
" 上一个单词的第一个字母
b
" 当前单词的最后一个字母,如果已经在最后一个字母,则会跳转到下一个单词的最后一个字母
e
" 上一个单词的最后一个字母
ge

" 跳转到行首
0
" 跳转到行尾
$

Easy-Motion插件

使用Vim-Plug安装Easy-Motion插件,并在.vimrc里面加上

v
nmap s <Plug>(easymotion-overwin-f2)

Normal-Mode中按下s并输入想要跳转到地方的头两个单词,并按下屏幕中提示的字符就可以将指针快速地移动到指定为位置。

例如我当前的光标再else的位置,我想快速跳转到 clk_baud位置处。在Normal Mode下按下 scl,并根据提示按下s键,光标就跳转到了指定的位置。

easy-motion

代码折叠

可以设置折叠的模式,这里直接设置为marker模式,且折叠标记设置为//BEGIN//END

v
:set foldmethod=marker
:set foldmarker=//BEGIN,//END
命令模式说明
zcNormal Mode折叠当前块
zoNormal Mode展开当前块
zCNormal Mode折叠所有可以折叠的块
zONormal Mode展开所有可以折叠的块

不常用操作

命令模式说明
CTRL-ONormal Mode打开上一个最近打开的文件
CTRL-INormal Mode打开下一个最近打开的文件
Ctrl-uNormal Mode向下移动半个屏幕
Ctrl-dNormal Mode向上移动半个屏幕

分屏操作

命令模式说明
:vsNormal Mode横向拆分窗口
:spNormal Mode纵向拆分窗口
C-w w h j k lNormal Mode切换当前窗口,w 是循环切换
C-w qNormal Mode关闭当前窗口

Buffer操作

命令模式说明
:lsNormal Mode列出当前所有打开的文件
:bnNormal Mode跳转到下一个编辑文件
:bpNormal Mode跳转到上一个打开的编辑文件

其他

使用--cmd 可以在shell里面调用vim的命令,从而和shell 进行结合并自动化完成某些操作

shell
vim --cmd PluginInstall

最新更新: