gg:到顶部 GG:到底部
进入编辑模式:i
删除选中内容:d
替换
全文替换:(by 彬)(有:):%s/x1/x2/g;即全文x1被替换为x2,g:代表全文
局部替换:n1,n2s/x1/x2/g;用x2替换n1到n2行的x1;
s 命令来替换字符串
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每行所有 vivian 为 sky
n 为数字,若 n 为 .,表示从当前行开始到最后一行
多文件替换
实际上只要如下两个命令即可(假设要将当前目录下所有扩展名为.txt/.cpp的文件中的hate替换成love):
:args *.txt *.cpp
:argdo %s/hate/love/gc | update
操作类:
GVIM:
撤销:normal模式下 :u
gg:到顶部
*:选中这个单词
使用下面命令在指定的行首添加注释:
:起始行号,结束行号s/^/注释符/g
取消注释:
:起始行号,结束行号s/^注释符//g
例子:
在10 - 20行添加 // 注释
:10,50s#^#//#g
在10 - 20行删除 // 注释
:10,20s#^//##g
批量注释或插入字符:(by yunis)
1. 先把光标放在要插入字符的位置,ctr+V:进入列操作;
2. 移动方向键,选中列
3. shift+i:插入//或字符
4. 按esc退出
比较ab两个文件的不同:gvimdiff a.sv b.sv
//XXX{{{.....//}}} 或者 //{{{XXX.....//}}}
zo(先把光标放到想看的地方,再直接输入)打开,zc折叠
要在.vimrc文件中加入下面这一行,上面这些操作才会有效;
:set foldmethod=marker
折叠参考: vim 折叠的用法 - 阿笨猫 - 博客园 (cnblogs.com)https://www.cnblogs.com/xuxm2007/archive/2011/11/10/2244418.html
VIM学习笔记 折叠 (Fold) - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/27473875
在vim中有3中方法可以跳转到指定行(首先按esc进入命令行模式):
1、ngg/nG (跳转到文件第n行,无需回车)
2、:n (跳转到文件第n行,需要回车)
marker折叠方式时,我们需要用标计来标识代码的折叠,系统默认是{{{和}}}
zf 创建折叠,比如在marker方式下:
zf56G,创建从当前行起到56行的代码折叠;
10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],<>等)。
zd 删除 (delete) 在光标下的折叠。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
批量删除:
按一下ESC键,确保退出编辑模式
按一下 :冒号键,(shift + ;)就可以输入 :冒号了。
然后输入 1,$d
:1,19d
输入以下命令,如删除文件中每一行中第一个|符号
:%s/|
复制
1)单行复制
在命令模式下,将光标移动到将要复制的行处,按“yy”进行复制;
2)多行复制 在命令模式下,将光标移动到将要复制的首行处,按“nyy”复制n行;其中n为1、2、3……
【yy】 复制光标所在的那一行
【nyy】 复制光标所在的向下n行
2、粘贴
在命令模式下,将光标移动到将要粘贴的行处,按“p”进行粘贴
【p,P】 p为将已经复制的数据在光标下一行粘贴;P为将已经复制的数据在光标上一行粘贴
2021.7.4
删除包含AAA的行:g/AAA/d;
删除不含BBB的行:v/BBB/d;
批量缩进:
:1,99< # 1~99行向左缩进一个tab,输入2个<<可以缩进2个tab间隔
:1,99> # 1~99行向右缩进一个tab
大小写切换:选中字符串,u:都切换为小写; U:都切换为大写;
打开目录:命令模式下:E
分屏:命令模式下:vsp
gvimdiff比较两个文件后,切换成水平方向或垂直方向 :
:windo wincmd K 切换到水平分屏;
:windo wincmd H 切换到垂直分屏;
快捷键设置:(在.vimrc文件里面设置)
快速注释一行(ctrl+m):map ^M I//<ESC>
(^:同时ctrl+v+m输入)
命令模式下:追踪文件:gf;回退到上一层:bd;回退到起始点:bf;
bp:回到上一个文件;bn:去到下一个文件
关闭当前分屏:ctrl+w c
关闭所有分屏,只保留当前分屏:only
shell下,分屏打开文件:
vim -on file1 file2 水平分割(默认horizontal)
vim -On file1 file2 垂直分割(vertical)
vim自动排版:
1. 按“V”或者“shift+v”进入可视行模式,选择要排版的内容。
2. 按“=”进行自动排版。
vim文件跳转: (参考公众号:集成电路设计及EDA教程)
gf | 在当前窗口中打开该文件 |
ctrl+w f | 以分屏模式打开该文件(水平分屏) |
ctrl+w gf | 在新的tab中打开该文件(详细的Tab的用法之后会讲解) |
bf | 回退到最开始的那个文件 |
ctrl+o | 回退一次; |
在其中一个Tab下输入:tabc即可关闭该Tab
代码块跳转:
区块主要包含()、[]、 {}、 #if、 /**/之间的跳转。
这些符号都是成对出现的,要在相匹配的符号对之间跳转可以直接用%即可。
在(处按%就会跳转到对应的)处,非常适合查找括号是否配对。反之,从)处按%键可以跳回对应的(处。
光标跳转:跳转距离+方向键
光标向下移动多行,比如80行:80↓
快速跳转到行首/尾
光标移动到行首:
^(移动到行首第一个非空白字符)
0或者Home键(移动到行首)
光标移动到行尾:
$或者End键
排序
对文本内容排序:sort;
应用场景:方便debug;
参考:VIM学习笔记 文本排序(sort) - 知乎 (zhihu.com)
使用以下命令,将按照数字进行排序:
:%sort n
组合以上命令,则可以按照数字倒序排序:
:%sort! n
使用以下命令,可以针对指定行范围内的文本进行排序:
:3,16sort
在可视化模式下选中文本,然后执行以下命令可以对选择的文本进行排序:
:'<,'>sort
使用以下命令,将在排序时去除重复的行。对于重复的多行,将仅仅保留第一行,而其它的行将被删除。
:%sort u
使用以下命令,可以针对所有文本进行倒序排序:
:%sort!
统计某些匹配到的关键词个数:%(有一个空格)s/match_word/gn
打开gvim的历史命令:
普通模式下:
q/ 查看使用/输入的搜索历史
q? 查看使用?输入的搜索历史
q: 查看命令行历史
列示图打开:两个文件
gvim -O(字母O,小写水平示图) file1 file2