vim进阶:200个终身受益的命令

科技   2024-08-26 12:00   江苏  
      

 

1.VIM的四种常见模式
一.启动Vim
1.双击桌面的图标,就可以启动Vim(是图形界面的)
2.在开始菜单---点--运行 接着输入 vim 或者gvim,就可以启动Vim或Gvim了.
二.Vim的模式
1.Vim常用模式.
   命令模式(command-mode)
   插入模式(insert-mode)
   可视模式(visual-mode)
   正常模式(normal-mode)
2.如何进入这些模式
①.正常模式
正常模式主要用来浏览和修改文本内容的
一般的,打开Vim都是正常模式。在任何模式下,只要按下 Esc 键就可以返回正常模式。
②.插入模式
插入模式则用来向文本中添加内容的
i    在光标所在字符前开始输入文字并进入插入模式
a   在光标所在字符后开始输入文字并进入插入模式
o   (字母o) 在光标所在行的下面单独开一新行来输入文字并进入插入模式
s   删除光标所在的字符并进入插入模式
I   在行首开始输入文字并进入插入模式。此行首指第一个非空白字符处。如果行首有空格,则在空格之后输入文字并进入插入模式
A 在行尾开始输入文字并进入插入模式。不必管光标在此行的什麽地方,只要按 A 就会在行尾等着您输入文字。
O (大写字母O) 在光标所在行的上面单独开一新行来输入文字并进入插入模式。
S   删除光标所在行并进入插入模式
③可视模式
可视模式相当于高亮选取文本后的普通模式。
可视模式具有子模式,以行为单位进行选取的可视行模式,使用“V”键进入(也就是Shift+v);和以块为单位进行选取的可视块模式,使用“Ctrl+v”键进入。
④命令模式
命令模式则多用于操作文本文件(而不是操作文本文件的内容),例如保存文件;或者用来改变编辑器本身的状态,例如设定多栏窗口、标签或者退出编辑器……
三.模式的转换
① 其它模式==>正常模式   
     按 Esc键
②正常模式==>插入模式       
     按 i   在光标前插入   
     按 I   在行首插入
     按 a   在光标后插入
     按 s   删除光标所在的字符再插入
     按 A 在行末插入   
     按 o   在当前行之下新建行  
     按 O 在当前行之上新建行
     按 S   删除光标所在行再插入
③ 正常模式==>命令模式  
      按 : (shift 加 分号)
④ 正常模式==>可视模式  
      按 v 可视模式   
      按 V 可视块模式
2.Vim常用命令
1、跳转翻页
在命令行下直接输入:行号 比如跳到500行,输入:500即可
:101       跳转到101行
Ctrl+f     向下翻页
Ctrl+b    向上翻页
Ctrl+d    向下翻半页
Ctrl+u    向上翻半页
ctrl+e    向下滚动一行
ctrl+y    向上滚动一行
n%       到文件n%的位置。
zz        将当前行移动到屏幕中央。
zt        将当前行移动到屏幕顶端。
zb        将当前行移动到屏幕底端
2、整体缩进的操作:
在命令行模式下,按住shift+v进入可视行选择状态,使用shift加上下左右方向键选择好整体的代码块,然后再按住shift+>或者shift+< 向右或者向左缩进即可整体缩进。
3、Vim多行缩进技巧
首先进入命令状态,然后按v进入visual状态,一定要在可视状态,选择多行()注意这里的选择可不是用鼠标选择,而是使用shift+方向键进行选择,用>或<缩进或缩出    
4、撤销命令
命令模式下按 u撤销
返回  ctrl+r
5光标移动
0      移动到行首
w      光标以单词向前移动 一直按w
nw    光标向前移动n个单词光标到单词的第一个字母上
B      移动到上一个单词开头,忽略标点
Enter  把光标移至下一行第一个非空白字符
b      与w相反
^      移动光标到行首第一个非空字符上去
$      移动光标到行尾第一个非空字符上去
%     移动到与制匹配的括号上去(),{},[],<>等。
nG     跳转到第n行。
可视模式
v        可视模式
V        选择行  shift+v
CTRL-V or CTRL-Q     选择块
G    移动到最后一行
gg  移动到第一行
h   左移一个空格
l   右移一个空格
下一行    j
上一行    k
E  跳到单词词尾 e 也是词尾 有区别  很有用   大写E跳跃跨度大
fc  把光标移到同一行的下一个c字符处
Fc  把光标移到同一行的上一个c字符处
M  把光标移到屏幕中间一行。
L  把光标移到屏幕最底端一行。
6、复制粘贴
y        复制选择的内容
ye        复制一个单词 (光标要在首字母)
yw      复制一个单词(光标到单词尾)
yaw      复制光标当前所在处的单词
y0      复制当前光标到行首
y$      复制光标到行尾    
yy        复制当前一行
5yy     从当前行开始复制5行
viw        选中光标当前所在处的单词
yiw        复制光标当前所在处的单词
p        粘贴
         

 

多次粘贴相同的值“ 0 p
x        可视模式下,x为剪切选择内容:%y+ enter   复制全部内容
:35,45 y+     复制特定行  复制35到45行
7、删除操作
dw        删除一个单词,需将光标移到单词的第一个字母上,按dw,如果光标在单词任意位置,用daw
dd        删除一行
cw        修改一个单词
D      删除当前行光标后内容
d^     删除光标到行首的字符
d$     删除光标到行尾的字符
ndd     删除当前光标n行
:g/^\s*$/d                             删除只有空白的行
删除光标后的所有内容    直到文章结尾      dG
删除光标前的所有内容    直到文章开头      dgg
删除具有特定关键词的行
:g/state/d   删除具有单词state的行    
:%d 删除全文
:100,200 d   删除100行到200行
d1G或dgg   剪切光标以上的所有行。
dG    剪切光标以下的所有行。8撤销返回操作
命令模式下:
u     返回
CTRL+R   撤销
9、显示你曾经输入过的字符
在命令模式下:按ctrl+p 或者 键盘的向上箭头
10 保存退出
存盘:    
:q!         :不存盘退出
:e!         :放弃修改文件内容,重新载入该文件编辑
:wq         :存盘退出
:w            :存盘
:wqa        :保存并关闭所有文件
:qa            :关闭所有文件
11 查找命令
查找
fx             :移动到一个指定的字符,单字符查找命令是最有用的移动命令之一。”fx” 命令向前查找本行中的字符 x。提示:”f” 表示 “Find”。
/pattern    :正方向搜索一个字符模式   从文件开头往结尾处搜索
?pattern     :反方向搜索一个字符模式 从文件结尾往开头处搜索
然后按n 继续向下找  按大写N向上搜索
精确查找整个单词    :如果你输入 “/the”,你也可能找到 “there”。要找到以 “the” 结尾的单词,可以用:
/the\>
“\>” 是一个特殊的记号,表示只匹配单词末尾。类似地,”\<” 只匹配单词的开头。这样,要匹配一个完整的单词 “the”,只需:
/\\>
把光标放到某个单词上面,然后按*号键,表示查找这个单词。”#” 命令在反向完成相同的功能。
查找整个单词:/\\>
:set hlsearch         :高亮显示查找到的单词
:set nohlsearch     :关闭改功能
:set ignorecase  忽略大小写的查找
:set noignorecase  不忽略大小写的查找
12 替换命令
Shift + * :让光标停留在想要查找的单词的任意一个字母上面, 然后输入 Shift + * ,即可快速选中该单词,并且通过 n  或  N 进行上一个或下一个的匹配。   

 

yw :让光标停留在单词的第一个字母上, 然后输入yw拷贝该单词, 然后输入 / (Ctrl + R) 0 (即 /”0),回车, 就查找到了第一个匹配的单词, 并且通过 n  或  N 进行上一个或下一个的匹配
         

 

   
[addr]s/源字符串/目的字符串/[option],我们可以看出addr和option是可以缺省不填的,他们各个字段的意思是:
 [addr]代表检索范围,缺省表示当前行,1,10表示1到10行,% 代表整个文件等价于1 , $  ,而  . , $ 代表当前行到文件末尾
 s代表替换的意思
 option代表操作类型,缺省只对第一个匹配的字符进行替换,g代表全局替换,c代表操作时确认,gc可以组合使用:%s/^/#/         全文的行首加入 # 字符,批量注释的时候非常有用
:%s= *$==        将所有行尾多余的空格删除
:g/^$/d          这里的g表示对文章中所有符合要求字符串执行替换操作,^表示行首,$表示行尾,整个意思是:将所有的空行删除命令模式:
简单指令
有无/g:有/g  表示所有,无则表示每一行第一个
:%s/string1/string2   在当前文件中,用string2 替换每一行的第一个string1  无需确认
:%s/string1/string2/g   在当前文件中,用string2 替换每一行的所有string1  无需确认
:%s/string1/string2/c  在当前文件中,用string2 替换所有的string1  需要一个一个确认
:line1,line2 s/string1/string2/g:在行line1至line2中间将所以string1替换为string2
:line1,line2 s/string1/string2/c:在行line1至line2中间将string1替换为string2,需要一个一个确认
:n, $s/sring1/string2 / 替换第 n 行开始到最后一行中每一行的第一个 string1为 string2 (空表示为最后一行)
:., $s/sring1/string2 /  替换当前行到最后一行中每一行的第一个 string1为 string2 (空表示为最后一行)
13内容转移
写文件
:n1,n2 write temp.c 将本文件中的n1,到n2行写入temp.c这个文件中去
:n1,n2 co n3         :将 n1 行到 n2 行之间的内容拷贝到第 n3 行下。
:n1,n2 m n3         :将 n1 行到 n2 行之间的内容移至第 n3 行下。
:n1,n2 d             :将 n1 行到 n2 行之间的内容删除。
:n1,n2 w filename     :将 n1 行到 n2 行之间的内容保存到文件 filename 中
使用剪贴板
"*y    :将内容复制到剪贴板
"*p    :将剪贴板的内容粘贴出来    
14 文件切换与打开
同时打开多个文件 :gvim file1 file2 file 3
切换到下一个文件:bn  
切换到上一个文件:bp
15 移动命令
查找替换:
way1:
/【word】 :查找某个word
? 命令功能与 “/” 的功能类似,但是是反方向查找
cw【newword】:替换为新word
n: 继续查找
.: 执行替换
way2:
:s/string1/string2/g:在一行中将string1替换为string2,g表示执行用c表示需要确认
:num1,num2 s/string1/string2/g:在行num1至num2中间将string1替换为string2
:1,$ s/string1/string2/g:在全文中将string1替换为string2
如果替换时需要确认,在g后面加上一个c(confirm)
如果要全文搜索,在”s/”前面加上一个%,例如”:% s/”
16删除重复行
http://blog.gdsyzx.edu.cn/sense/?p=1129
17列插入
1: 定位光标
2: CTRL+v             #进入Visual Mode。
3: j                       #选择要在哪些行加入?!
4: I                       #一定是大写!
5: 输入要插入的文本
6: ESC 
18多界面操作
分屏
当前文件上下分屏 ctrl + w 再按s ,或 :sp
和同一文件夹下的a.sv比较(上下) :sp ./a.sv 或 : ./ 然后找到a.sv回车打开
         

 

当前文件左右分屏 ctrl + w 再按v ,或 :vsp
和同一文件夹下的a.sv比较(左右) :vsp ./a.sv 或 :vsp ./ 然后找到a.sv回车打开    
         

 

切换分屏:ctrl+w ,再按 h左, l右, j 下, k 上,w 窗口循环切换
ctrl + w H L J K 是上下和左右间移动分屏
         

 

关闭当前窗口分屏:ctrl+w,再按 c
         

 

向右或向下方交换窗口:Ctrl + w + r 而Ctrl + w + R则和它方向相反。
交换同列或同行的窗口的位置:Ctrl + w + x
命令   :vs  多个竖立界面
命令   :sp  多个横向界面
目录跳转选择    :E
上跳行       W
下跳行       B
界面跳转:   ctrl+w   再按w或者方向键
19 查看行号:set nu
20 排序:sort
21 标记:ma `a
使用标记标注位置:便于快速跳转
 m{a-z}: 标记光标所在位置,局部标记,只用于当前文件。
 m{A-Z}: 标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。
 `{a-z}: 移动到标记位置。
 ‘{a-z}: 移动到标记行的行首。
 `{0-9}:回到上[2-10]次关闭vim时最后离开的位置。
 “: 移动到上次编辑的位置。“也可以,不过“精确到列,而”精确到行 。如果想跳转到更老的位置,可以按C-o,跳转到更新的位置用C-i。
 `”: 移动到上次离开的地方。
 `.: 移动到最后改动的地方。
 :marks 显示所有标记。
 :delmarks a b – 删除标记a和b。
 :delmarks a-c – 删除标记a、b和c。
 :delmarks a c-f – 删除标记a、c、d、e、f。
 :delmarks! – 删除当前缓冲区的所有标记。
 :help mark-motions 查看更多关于mark的知识。    
22 插入
i: 在光标前插入;一个小技巧:按8,再按i,进入插入模式,输入=, 按esc进入命令模式,就会出现8个=。这在插入分割线时非常有用,如30i+就插入了36个+组成的分割线
 :r filename在当前位置插入另一个文件的内容。
 :[n]r filename在第n行插入另一个文件的内容。
 :r !date 在光标处插入当前日期与时间
23文本对象
 aw:一个词
 as:一句。       :连续没有空格的多行
 ap:一段。       :连续没有空格的多行
 ab:一块(包含在圆括号中的)。例化时用到
y, d, c, v都可以跟文本对象
24模式匹配:执行操作
还有一种比替换更灵活的方式,它是匹配到某个模式后执行某种命令,
语法为 :[range]g/pattern/command
例如 :%g/^xyz/normal dd。
表示对于以一个空格和xyz开头的行执行normal模式下的dd命令。
关于range的规定为:
 如果不指定range,则表示当前行。
 m,n: 从m行到n行。
 0: 最开始一行(可能是这样)。
 $: 最后一行
 .: 当前行
 %: 所有行
24分屏操作
 vim -o file1 file2:水平分割窗口,同时打开file1和file2
 vim -O file1 file2:垂直分割窗口,同时打开file1和file2
:E 跳到目录 选中文件 o打开文件
Ctrl+W ctrl+w 切换窗口
25水平分割
:sp           水平分割出同样大小的文件
:sp filename   水平分割窗口,并在新窗口中显示文件filename    
:nsp         水平分割出一个n行高的窗口
ctrl+w +f     水平分割出一个窗口,并在新窗口打开名称为光标所在词的文件      

 

help sp 说明
   

 

 

 

26垂直分割
:vs           把当前窗口分割成竖直分布的两个窗口
:vne         垂直分割出一个新窗口
27大小写切换
选中:gu 小写 gU 大写
:m,n  gU   从m行到n行 全部大写
单词virtul全部大写:??
某个单词大小写切换:ESC==>鼠标双击单词==>gu 或者gU
27缩进缩出-自动排版
正常模式下,按两下>;光标所在行会缩进。
如果先按了n,再按两下>;,光标以下的n行会缩进。    
对应的,按两下<;,光标所在行会缩出。
如果在编辑代码文件,可以用=进行调整。
在可视模式下,选择要调整的代码块,按=,代码会按书写规则缩排好。
或者n =,调整n行代码的缩排
:130,140 >>   第130行到140行缩进
28文件目录
:pwd 显示当前文件目录
29 改写文件
 c[n]w: 改写光标后1(n)个词。
 c[n]l: 改写光标后n个字母。
 c[n]h: 改写光标前n个字母。
 [n]cc: 修改当前[n]行。
 [n]s: 以输入的文本替代光标之后1(n)个字符,相当于c[n]l。
 [n]S: 删除指定数目的行,并以所输入文本代替之。
注意,类似cnw,dnw,ynw的形式同样可以写为ncw,ndw,nyw。
NOTE: 因为vim版本以及快捷命令的设置不同,少量命令可能不适用。

本文内容仅代表作者观点,不代表平台观点。

如有任何异议,欢迎联系我们。

如有侵权,请联系删除。


往期精彩回顾





2021年的第一场雪!英特尔2020年Q4财报解读



利用硬件辅助验证工具加速功能仿真


博文:裸片尺寸和光罩难题——光刻扫描仪吞吐量的成本模型


博文速递:Race condition in digital circuits


IP与SoC设计
《IP 与SoC》依托无锡国家“芯火”平台,全面报道全球IP与SoC设计技术的发展和国内外应用经验,为中国IC设计行业搭建一个IP与SoC资讯交流、产业促进的平台,为中国IC设计行业提供IP与SoC专业知识及相关信息支持和服务。
 最新文章