VIM——基本操作
一、widows下的gvim安装及配置
-
vim的Verilog环境配置
摘自:https://blog.csdn.net/qq_41467882/article/details/120274829

set nocompatible "不兼容vi
syntax on "语法高亮度显示
set noerrorbells " 不让vim发出讨厌的滴滴声
set shortmess=ati " 启动的时候不显示那个援助索马里儿童的提示
set t_Co=256 "开启256色支持
set hlsearch "搜索设置高亮
colorscheme desert "配色方案
set background=dark "配置主题整体的色调,只有两个选择:dark和light(暗色调和亮色调)
highlight Function cterm=bold,underline ctermbg=red ctermfg=green "color set
set nu "显示行号
set relativenumber "显示相对行号
set cursorcolumn "add cursor in column
set cursorline "add cursor in line
set guifont=Monospace\ 16 "gui style
"set guifont=Courier_new:h16
set lines=35 columns=118 "其中lines是窗口显示的行数,columns是窗口显示的列数
winpos 200 100 "后面两个参数指的自屏幕左上角像素值参考位置
set tabstop=4 "tab键相当于4个空格键
set expandtab "來將 tab 转成 space combine with tabstop
set shiftwidth=4 "换行自动变为空格
set autoindent "设置自动缩进 自动缩进,当你第一行敲 tab + 文字 回车后 下一行自动给你加个 tab
set backspace=2 "enable backspace
set novisualbell "不要闪烁
set laststatus=2 "启动显示状态行
set encoding=utf-8 "文件编码
set completeopt=menu,preview,longest "自动补全相关的设置
"不要生成swap文件,当buffer被丢弃的时候隐藏它
setlocal noswapfile
set bufhidden=hide
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
"ban up and also keys
"imap <Up> <Nop>
"imap <Down> <Nop>
"imap <Left> <Nop>
"imap <Right> <Nop>
"nmap <Up> <Nop>
"nmap <Down> <Nop>
"nmap <Left> <Nop>
"nmap <Right> <Nop>
imap jk <ESC> g,"在编辑模式下使用jk替代ESC进入命令模式
imap <C-L> <C-X><C-L> “使用CTRL L 代替 CTRL X +CTRL L 就是整个句子的补全
nmap ,l ^
nmap ,r $
"进行版权声明的设置
"添加或更新头
map <F3> :call TitleDet()<cr>'s
function AddTitle()
call append(0,"/*=============================================================================")
call append(1,"#")
call append(2,"# Author: meng - email@vip.qq.com")
call append(3,"#")
call append(4,"# QQ : xxxxxxxxx ")
call append(5,"#")
call append(6,"# Last modified: ".strftime("%Y-%m-%d %H:%M"))
call append(7,"#")
call append(8,"# Filename: ".expand("%:t"))
call append(9,"#")
call append(10,"# Description: ")
call append(11,"#")
call append(12,"=============================================================================*/")
echohl WarningMsg | echo "Successful in adding the copyright." | echohl None
endf
"更新最近修改时间和文件名
function UpdateTitle()
normal m'
execute '/# *Last modified:/s@:.*$@\=strftime(":\t%Y-%m-%d %H:%M")@'
normal ''
normal mk
execute '/# *Filename:/s@:.*$@\=":\t\t".expand("%:t")@'
execute "noh"
normal 'k
echohl WarningMsg | echo "Successful in updating the copy right." | echohl None
endfunction
"判断前10行代码里面,是否有Last modified这个单词,
"如果没有的话,代表没有添加过作者信息,需要新添加;
"如果有的话,那么只需要更新即可
function TitleDet()
let n=1
"默认为添加
while n < 10
let line = getline(n)
if line =~ '^\#\s*\S*Last\smodified:\S*.*$'
call UpdateTitle()
return
endif
let n = n + 1
endwhile
call AddTitle()
endfunction
二、VIM的模式

三、各种操作
1.方向操作
| 按键 | 说明 |
|---|---|
| h | 左 |
| l | 右(小写 L) |
| j | 下 |
| k | 上 |
| w | 移动到下一个单词 |
| b | 移动到上一个单词 |
2.保存
:w <文件名>

3.退出
| 命令 | 说明 |
|---|---|
| :q! | 强制退出,不保存 |
| :q | 退出 |
| :wq! | 强制保存并退出 |
| :w <文件路径> | 另存为 |
| :saveas 文件路径 | 另存为 |
| :x | 保存并退出 |
| :wq | 保存并退出 |
| Shift+zz | 保存并退出 |
4.删除
| 命令 | 说明 |
|---|---|
| x | 删除游标所在的字符 |
| X | 删除游标所在前一个字符 |
| Delete | 同 x |
| dd | 删除整行 |
| dw | 删除一个单词(不适用中文) |
| d$或D | 删除至行尾 |
| d^ | 删除至行首 |
| dG | 删除到文档结尾处 |
| d1G | 删至文档首部 |
| ndd | 表示一次删除 n 行 |
5.重复上一次命令
在视图模式下 .(小数点)表示重复上一次的命令操作。
6.插入操作
- cw 输入cw会把word删掉


| 命令 | 说明 |
|---|---|
| i | 在当前光标处进行编辑 |
| I | 在行首插入 |
| A | 在行末插入 |
| a | 在光标后插入编辑 |
| o | 在当前行后插入一个新行 |
| O | 在当前行前插入一个新行 |
| cw | 替换从光标所在位置后到一个单词结尾的字符 |
7.行间跳转
| 命令 | 说明 |
|---|---|
| nG(n Shift+g) / ngg | 游标移动到第 n 行 (如果默认没有显示行号,请先进入命令模式,输入 :set nu 以显示行号) |
| gg | 游标移动到到第一行 |
| G(Shift+g) | 到最后一行 |
在完成依次跳转后,可以使用 Ctrl+o 快速回到上一次(跳转前)光标所在位置
8.行内跳转
| 命令 | 说明 |
|---|---|
| w | 到下一个单词的开头 |
| e | 到当前单词的结尾 |
| b | 到前一个单词的开头 |
| ge | 到前一个单词的结尾 |
| 0或^ | 到行头 |
| $ | 到行尾 |
| f<字母> | 向后搜索<字母>并跳转到第一个匹配的位置(非常实用) |
| F<字母> | 向前搜索<字母>并跳转到第一个匹配的位置 |
| t<字母> | 向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用) |
| T<字母> | 向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用) |
9.复制粘贴剪切
- 复制
| 命令 | 说明 |
|---|---|
| y | 复制 |
| yy | 复制游标所在的整行 |
| y^ | 复制至行首y0,不含光标所在处字符 |
| y$ | 复制至行尾。含光标所在处字符。 |
| yw | 复制一个单词 |
| y2w | 复制两个单词 |
| yG | 复制至文本末 |
| ygg | 复制至文本开头 |
- 粘贴
| 命令 | 说明 |
|---|---|
| p(小写) | 粘贴至光标后 |
| P(大写) | 粘贴至光标前 |
- 剪切
| 命令 | 说明 |
|---|---|
| d | 剪切一行 |
10.替换
| 命令 | 说明 |
|---|---|
| r+<待替换字母> | 将游标所在字母替换为指定字母 |
| R | 连续替换,直到按下 Esc |
| cc | 替换整行,即删除游标所在行,并进入插入模式 |
| cw | 替换一个单词,即删除一个单词,并进入插入模式 |
| C(大写) | 替换游标以后至行末 |
| ~ | 反转游标所在字母大小写 |
11.撤销
| 命令 | 说明 |
|---|---|
| {n}u | 撤销一次或 n 次操作 |
| U(大写) | 撤销当前行的所有修改 |
| Ctrl+r | redo,即撤销 undo 的操作 |
12.缩进
| 命令 | 说明 |
|---|---|
| >> | 向右缩进 |
| << | 向左缩进 |
| :set shiftwidth? | 获取当前设定的缩进值 |
| :set shiftwidth=4 | 设置当前缩进值为4 |
| :ce | 使本行内容居中 |
| :ri | 使本行内容靠右 |
| :le | 使本行内容靠左 |
13.查找
/<字符串> 回车,向下查找<字符串>
?<字符串> 回车,向上查找<字符串>
*,向下查找游标所在处单词
#,向上查找游标所在处单词
noh,取消查找
n查找下一个<字符串>,N与之相反
14.替换
:%s/xx/yy/gc
:63,72s/xx/yy/gc
%s,作用于整个文档
:63,72s,作用于63到72行文档
“xx”代表着文档中需要替换的内容,“yy”表示替换后的内容,“gc”是 快捷命令的指令不需要进行修改,随后按下的“y”表示“yes”,即确定进行修改
15.列删除
ctrl + q进入列操作模式,使用jkhl选中要删除列的范围,按删除键x或者delete即可删除。
16.列插入
ctrl + q进入列操作模式,使用jkhl选中要插入列的范围,按删除插入键插入字符,按esc即可插入列。
17.代码补全
ctrl + p
18.分窗口
:vs:左右分屏
Ctrl+w v左右分屏
:sp:上下分屏
Ctrl+w s上下分屏
:q:退出一个窗口
ctrl + w 切换窗口
ctrl + w q退出当前窗口

浙公网安备 33010602011771号