type
status
date
slug
summary
tags
category
Property
Jan 25, 2023 05:07 AM
icon
password
属性
属性 1
描述
Origin
URL
一、GVIM 介绍及安装二、配置 GVIM 界面2.1、简单. vimrc 配置使用2.2、功能齐全的. vimrc 及插件配置2.3、vim 常用插件使用方法2.3.1、多窗口编辑命令2.3.2、树形浏览窗口2.3.3、自动补全2.3.4、代码标记(mark)三、GVIM 使用3.1、打开一个文件3.2、三种工作模式3.2.1、命令模式3.2.2、输入模式(插入模式)3.2.3、底行命令模式(ex 转义模式)3.2.4、三种模式使用注意3.3、常用命令3.3.1、移动光标操作3.3.2、删除操作3.3.3、改变和替换操作3.3.4、保存文件并退出 gvim 编辑器3.3.5、查询命令3.3.6、拷贝粘贴命令3.3.7、文本加密(很少使用,了解即可)3.3.8、设置行号、设置大小写、设置分行、设置查询3.3.9、自动添加字符串(自动补全)3.3.10、排序3.3.11、大小写转换3.3.12、多个窗口操作3.3.13、visual 模式(重要)3.3.14、几种替换操作3.3.15、文件跳转(有用)3.3.16、比较3.3.17、grep 全局搜索字符串的方法3.3.18、其他指令四、正则表达式4.1、正则表达简要介绍4.2、正则表达使用方法4.2.1、搜索命令4.2.2、:s 替换命令4.2.3、元字符4.2.4、特殊字符4.2.5、表示数量的元字符4.2.6、表示位置的符号4.2.7、牛刀小试4.3、正则表达实例练习4.3.1、把所有单词 help 或 Help 都改为大写的 HELP4.3.2、使用单个空格替换一个或多个空格4.3.3、删除所有空行(没有任何字符,除了一个回车符)4.3.4、删除含有某些字符的行4.3.5、删除每行所有的前导空格4.3.6、在文件中的每一行的开始插入 >4.3.7、在每一行的尾部加上一个句号4.3.8、删除以数字开头的行(有开头有结尾)4.3.9、删除以 a,b,c 开头的行(有开头有结尾)4.4、替换变量(高级用法)4.4.1、删除重复行4.4.2、交换列表中所有连字符分割的条目的顺序4.4.3、将所有 foo(a,b,c) 的实例改为 foo(b,a,c)4.4.4、查找 test 开头的后面为一个或多个空格,然后为一个单词,将 test 和这个单词调换位置4.5、函数式4.6、与 Perl 正则表达式区别4.7、sed 用法【在 Linux 的 terminal 中执行】4.7.1、删除所有空行4.7.2、删除所有只包含空格或者制表符的行4.7.3、删除所有引号4.8、调试步骤参考资料

一、GVIM 介绍及安装

vivisual的缩写,其意为可视化。它是 UNIX 系统文本编辑的标准工具,也是深受用户欢迎的全屏幕编辑程序。利用光标在屏幕上的移动,用户可以方便的建立、修改或插入删除文本,寻找和替换文本,复制、剪接和粘贴文本块。所有 vi 编辑程序下的文件均为ASClI文件。
vi编辑器时,当前终端只能操作已打开的某个文件,无法进行其他操作。而gvim则实现了终端和文本编辑分离的功能。
gvim安装方法也非常简单,直接在命令行输入:

二、配置 GVIM 界面

  • vim 编辑器相关的所有功能开关都可以通过. vimrc 文件进行设置
  • .vimrc 配置文件分系统配置和用户配置两种
  • 系统 vimrc 配置文件存放在 vim 的安装目录,默认路径为/usr/share/vim/.vimrc。可以使用命令echo $VIM来确定 vim 的安装目录
  • 用户 vimrc 文件,存放在用户主目录~/.vimrc。可以使用命令echo $HOME来确定用户主目录
  • 注意:用户配置文件优先于系统配置文件,vim 启动时会优先读取当前用户根目录下的. vimrc 文件。所以与个人用户相关的个性化一般都放在~/.vimrc中。

2.1、简单. vimrc 配置使用

使用gvim ~/.vimrc来打开 GVIM 的配置文件,在其中输入下列内容进行配置,最后保存关闭即可!

2.2、功能齐全的. vimrc 及插件配置

  • vim 已经为我们提供了足够满足日常文本处理的功能
  • 在实际编写代码中,我们还经常需要就所编写的代码语言提供更多的编辑支持,例如代码语法高亮、文件浏览、多窗口切换、自动补全等等。
  • 这些不同的功能并不是 vim 原生的,而是由不同的 vim 插件贡献者所带来的。
  • 在你以后逐渐熟悉 vim 和它的插件用法的时候,你也会考虑安装自己想要的插件,不过从满足 SV/UVM 编程的日常来看,这套 vim 配置和插件集对于日常验证工作的支撑已经足够了!
vim 配置文件和插件获取:
直接将三个文件拷贝到用户主目录下即可!
notion image

2.3、vim 常用插件使用方法

2.3.1、多窗口编辑命令

  • ws - 横向切割新窗口
  • wv - 纵向切割新窗口
  • wc - 关闭当前窗口
  • <Ctrl + {h,j,k,l}> - 窗口之间切换
  • <Ctrl + f> - 单个窗口向前翻页
  • <Ctrl + b> - 单个窗口向后翻页

2.3.2、树形浏览窗口

  • vt:VSTreeExplorer 擦肩
  • r:更新文件夹(refresh)
  • 鼠标双击 / r:打开或收起文件夹
  • u:切换到上层目录

2.3.3、自动补全

  • Tab键支持代码自动补全,再利用上下键和回车键来选择

2.3.4、代码标记(mark)

  • mm:用蓝色标记(desert 主题)当前行数,方便稍后查找
  • mnmp:以当前所在行为准,找到下一个或者上一个标记过的代码行

三、GVIM 使用

3.1、打开一个文件

  • 如果 file.txt 不存在,则会新建。

3.2、三种工作模式

3.2.1、命令模式

用户进入 gvim 编辑器时,即处于命令模式。在命令模式下用户输入的内容被翻译成命令并传给 gvim 编辑器。
  • esc键进入到命令模式(无论当前处于何种模式)

3.2.2、输入模式(插入模式)

在这种模式下的 gvim 编辑程序类似一台打印机。用户键入的内容,都作为 ASClI 文本来接受并显示它们。
  • i键进入到命令模式(当前必须处于命令模式)

3.2.3、底行命令模式(ex 转义模式)

所有以冒号开始的命令都能把 gvim 编辑程序的光标移到屏幕的底行,使 gvim 编辑程序进入底行命令模式,并且在那里输入命令的其他部分。
  • :键进入到命令模式(当前必须处于命令模式)

3.2.4、三种模式使用注意

1)只有在输入模式下,才能接收用户从键盘上输入的字符;只有在命令模式下才能对文件进行修改退出、存盘:wq)等操作在底行命令模式下进行。
2)从输入模式切换到命令模式,必须按 ESC 键;从命令模式转换到输入模式,使用的命令有A,a,I,i,O,o等键。
notion image

3.3、常用命令

3.3.0 常用命令速查
notion image

3.3.1、移动光标操作

  • 上、下、左、右方向键移动光标,也可用鼠标直接点击。
常用移动快捷键:
快捷键
功能描述
h
光标向左移动一位
j
光标向下移动一行
k
光标向上移动一行
l
光标向右移动一行
w
光标移动至下一个单词的单词首
b
光标移动至上一个单词的单词首
e
光标移动至当前单词的单词尾
nw
n 为数字,表示光标向右移动 n 个单词
nb
n 为数字,表示光标向左移动 n 个单词
0^
光标移动至当前行的行首
$</code></td><td>光标移动至<strong>当前行的行尾</strong></td></tr><tr><td><code onclick="mdcp.copyCode(event)">n$
光标移动至当前行至 n 行的行尾 ,n 为数字
gg
光标移动到文件开头
G
光标移动到文件末尾
nG
光标移动到第 n 行,n 为数字
:n
编辑模式下使用的快捷键,可以将光标快速定义到指定行的行首
%
快速移动到匹配的括号处,如:“()”、“{}”、“begin…end”、“function/task”(重要)

3.3.2、删除操作

  • 删除字符:光标移动到该字符下,然后按x键可删除光标处字符。误操作,按u进行撤销(undo)。
  • 删除词:光标移动到词的第一个字符下,按下dw键,要删除多个词,就在前面加上数字,如删除两个词2dw。误操作,按u进行撤销。
  • 删除行:光标移动到该行的任意位置,按下dd键即可,同理若按下2dd则连续删除两行。误操作,按u进行撤销。
快捷键
功能
x
删除光标所在字符
dw
删除光标所在的单词
dd
删除当前行(实际上是剪切,使用p可以完成粘贴操作)
D
删除光标到当前行尾
ndd
删除当前光标所在行往下数 n 行,n 是数字
d$
删除光标至行尾的所有字符
dG
删除当前行到最后一行

3.3.3、改变和替换操作

快捷键
功能
r
替换光标所在的字符(replace)(只可替换光标处一个字符)【较常用
R
从光标所在位置开始替换字符(可以一直替换),按 “ESC” 可以结束
cl
修改当前字符(change)【实际是删除当前字符,而后进入插入模式】
cc
修改当前行 【实际是删除当前行,而后进入插入模式】
c$
修改到行尾的内容【实际是删除光标至行尾的所有字符,而后进入插入模式】
ddp
上下两行交换(其实是先执行 dd,再执行 p 的命令组合)【较常用
:%s/abc/123/g
将文中所有的 abc 替换成 123(%表示全局替换范围;s表示替换 substitute;g表示 global)【较常用】;人为确认每个替换是否要进行,在最后加上c,命令: :%s/abc/123/gc
其他几个替换:
快捷键
功能
:s/abc/123/g
光标所在行的 abc 替换成 123(%表示全局替换范围;s表示替换 substitute;g表示 global)
:n1,n2s/abc/123/g
n1 行到 n2 行的 abc 替换成 123(%表示全局替换范围;s表示替换 substitute;g表示 global);从第 1 行到最后一行全部替换,还可表示为::1,$s/abc/123/g
:g/abc/123/g
将文中所有的 abc 替换成 123
:g/abc/123/gc
将文中所有的 abc 替换成 123,参数c用来让用户确定是否替换

3.3.4、保存文件并退出 gvim 编辑器

  • 按下:wq键,再按回车键:将当前编辑的 ASCII 文本写入磁盘。
  • 按下:q!,再按回车键:强制退出 gvim 编辑器。(注意文件如果改动,强制退出改动内容会丢失)

3.3.5、查询命令

快捷键
功能
/xxx
从前往后搜索 “xxx”【支持正则表达式,查找一组词等】(较常用
?xxx
从后往前搜素 “xxx”
n/N
配合前两个命令,跳转到下 / 上一个
/+上下箭头
搜索历史
:+ 上下箭头
命令的历史
shift+*
往后查找当前的 word,前提是光标移动到要查找的 word
shift+#
往前查找当前的 word,前提是光标移动到要查找的 word

3.3.6、拷贝粘贴命令

快捷键
功能
yw
复制光标所在字符到所在单词末尾字符
y$
复制光标至行尾的字符
yy
复制当前行
nyy
复制当前 n 行,n 是具体的数字
Y
同 yy
p
粘贴在光标后
P
粘贴在光标前

3.3.7、文本加密(很少使用,了解即可)

  • 输入:X后,连续两次输入要设置的密码,随后:wq保存退出。
  • 寻常方式打开该文件,输入上述设置的密码即可访问!

3.3.8、设置行号、设置大小写、设置分行、设置查询

设置行号
  • :set number或者set nu,显示行号
  • :set nonu,去除行号
设置大小写
  • :set ic,不区分大小写(ignore capital)
  • :set noic,区分大小写
显示行号
  • :set wrap,分行显示
  • :set nowrap,不分行显示
设置查询(意义不大,可直接看)
  • :set wrap?,当前是否是分行
  • :set ic?,当前是否是忽略大小写
  • set nu?,当前是否显示行号
该种在底行命令的设置方法与本文开头的.vimrc设置方法区别:该方法只针对该次编辑,.vimrc针对的是所有编辑!

3.3.9、自动添加字符串(自动补全)

注:ab是abbreviate缩写
eg:输入模式下键入usa后,再按ESC键,自动补全为United States of America(当然输入usa后,直接按空格键也会自动补全!):
除了这种方式自动补全,还有另外一种方式,即在输入模式下,打出前面出现过单词的部分,然后按下ctrl+p可自动补全!
除了ab这种,还有iab,通常直接写到.vimrc这个文件中,表示的是在插入模式下缩写有效!

3.3.10、排序

  • 文件内容排序,可以使用如下命令::%!sort。想排具体的行,如:30,32!sort,30 到 32 行的内容进行排序!

3.3.11、大小写转换

  • 先按ctrl+v进入 visual 模式,移动方向键选中字符串,然后按U(转换为大写)或u(转换为小写)。【鼠标直接拖动选中内容,可自动进入 visual 模式,然后再按U(转换为大写)或u(转换为小写),这样也是可以的!】

3.3.12、多个窗口操作

快捷键
功能
:sp(用得多,后面跟文件名,可直接打开文件) 、ctrl+w+s(用得少)
横着开新窗口(split)
:vsp(用得多,后面跟文件名,可直接打开文件)、ctrl+w+v (用得少)
竖着开新窗口(vertical split)
鼠标直接点不同窗口(用的多)、ctrl+w(要按两次)、
切换窗口
:e .
查看父目录内容,方向键选中哪个后,点击回车即可打开!
:qa
关闭所有窗口,a 表示 all
注::split .可以在已打开文件的基础上,再分屏打开想要打开的文件!

3.3.13、visual 模式(重要)

  • 先按ctrl+v进入 visual block 模式,移动方向键选中字符串(按 v 进入 visual 直接拖曳鼠标选中也是自动进入 visual 模式;)
  • 先按ctrl+v进入 visual block 模式,再: d:剪切;y:复制;p:粘贴
  • 先按ctrl+v进入 visual block 模式,再按iw选中光标所在单词,也可直接按viw
  • 先按ctrl+v进入 visual block 模式,再按I编辑内容,最后按下ESC即可实现多行编辑的操作!
  • 先按ctrl+v进入 visual block 模式,选中要缩进的行。按shift+>实现向右缩进,按shift+<实现向左缩进。或者在底行命令模式下输入:n1,n2>实现 n1-n2 行向右缩进;n1,n2<实现 n1-n2 行向左缩进。

3.3.14、几种替换操作

  • :%s/s1/s2/g:全局替换
  • :100,200 s/s1/s2/g:100 到 200 行之间替换
  • visual模式下替换:按下r替换单个字符

3.3.15、文件跳转(有用)

  • 光标移动至文本中的文件名,然后在命令模式下按gf,即可跳转到该文件
  • 想要回到跳转前的文件,输入:bd即可!

3.3.16、比较

3.3.17、grep 全局搜索字符串的方法

想要在当前目录搜索所有包含factory字符串的 sv 文件,可以用如下命令
notion image

3.3.18、其他指令

快捷键
功能
u
撤销
ctrl+r
取消撤销
:help
查看所有帮助
:ctrl+d
查看所有可选命令
ctrl+pctrl+n
字符自动补全,前提是文本前面出现过输入模式下使用(非常有用

四、正则表达式

4.1、正则表达简要介绍

  • 正则表达式在 Linux 系统中用处非常广
  • 正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操作
  • gvim、perl、sed 等均会使用
注:perl是一门脚本语言,sed是把命令在文本中去实现。
先来看个小例子:
功能:foo 函数的第一个参数和第二个参数互换,即foo(x,y,z)换成foo(y,x,z)

4.2、正则表达使用方法

4.2.1、搜索命令

  • 底行命令模式下使用
  • 通过搜索来进行调试,判断内容
  • 一般调试正则表达式的时候就是反斜杠/

4.2.2、:s 替换命令

  • 底行命令模式下使用
  • 通常在执行的时候使用
  • 替换字符串通常是具体的字符串,而不是正则表达式

4.2.3、元字符

符号
功能
.
匹配任意一个字符
[abc]
匹配方括号中的字符,此处匹配abc字符。可以用-表示字符范围,如[a-z0-9]匹配小写字符和阿拉伯数字
[^abc]
匹配除方括号中字符之外的字符,此处匹配除a/b/c之外的字符
/code>
匹配阿拉伯数字,等同于[0-9](decimal)
匹配阿拉伯数字之外的任意字符,等同于[^0-9]
匹配十六进制,等同于[0-9A-Fa-f](heximal)
匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f]
匹配单词字母,等同于[0-9A-Za-z_](word)
匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]
/code>
匹配<TAB>字符(table)
匹配空白字符,等同于[(space)
匹配非空白字符,等同于[^\t]
注:大写的匹配是相反的作用!注意上述元字符匹配是在底行命令模式下,按/进入搜索后,再输入上述元字符才能进行匹配。

4.2.4、特殊字符

符号
功能
*
匹配*字符
.
匹配.字符
/
匹配/字符
\
匹配</code>字符
[
匹配[字符
eg:如果要找[5],可以在底行命令模式下输入/\[5\]
注:类比 C 语言的转义字符。

4.2.5、表示数量的元字符

符号
功能
*
匹配0-任意
+
匹配1-任意
?
匹配0-1
{n,m}
匹配n-m个(大于等于 n,小于等于 m)
{n}
匹配n
{n,}
匹配n-任意个(大于等于 n)
{,m}
匹配0-m个(小于等于 m)

4.2.6、表示位置的符号

符号
功能
$</code></td><td>匹配<strong>行</strong>尾,如<code onclick="mdcp.copyCode(event)">/a$:匹配以 a 结尾的
^
匹配首,如/^a:匹配以 a 开头的(没有中括号,注意区分[^abc]
&lt;
匹配单词词首
&gt;
匹配单词词尾
eg:/\<abc\>:以 a 开头,以 c 结尾的单词,如abc就是符合要求的,但是hiabcd是不符合要求的!

4.2.7、牛刀小试

匹配hello这个单词的方法:
  • ①、/hello
  • ②、/h.*o
  • ③、/h\w\+o

4.3、正则表达实例练习

4.3.1、把所有单词 help 或 Help 都改为大写的 HELP

注:%表示的是全局范围,当然可以用10-90表示 10 到 90 行的范围;s(substitute)执行的是替代; 匹配方括号[]中的字符(或的关系);global 执行的其他命令

4.3.2、使用单个空格替换一个或多个空格

4.3.3、删除所有空行(没有任何字符,除了一个回车符)

其中,g表示的是 global;^$表示的是空行;d表示的是删除;[\t]*表示的是0-任意个空格键!
  • 第一条命令删除的是开头和结尾没有字符的空行;
  • 第二条命令删除的是字符之间的 space 键。

4.3.4、删除含有某些字符的行

上述命令格式::[range]global/{pattern}/{command},global 命令在 [range] 指定的文本范围内(缺省为整个文件)查找 {pattern},然后对匹配到的行执行命令 {command},如果希望对没匹配上的行执行命令,则使用global!vglobal命令!

4.3.5、删除每行所有的前导空格

其中,^ *表示空格开头的0-任意个字符

4.3.6、在文件中的每一行的开始插入 >

4.3.7、在每一行的尾部加上一个句号

4.3.8、删除以数字开头的行(有开头有结尾)

  • 以数字开头,以任意字符结尾的行。
其中,\d表示以数字开头,.表示任意字符,*表示0-任意
注:和:g/^\d.*$/d的区别在于是用空行来替代了,而不是把空行删除了。
还可以这样这样:

4.3.9、删除以 a,b,c 开头的行(有开头有结尾)

4.4、替换变量(高级用法)

  • 使用\(\)括号括起正则表达式,即可在后面使用 1、\2 等变量来访问\(\)中的内容。
eg:如下正则表达式,头和尾处 a 的个数相同的字符串,如:aabbbaaaaacccaaa,但是不匹配abbbaa
注:等价于/a\+[^a]\+和前面a的个数一样
其中,a\+它的含义是匹配 1 个或多个 a,这里也使用\(\)对该表达式进行了分组(即替换变量);[^a]\+表示匹配 1 个或多个非 a;\1表示与第 1 个分组匹配完全一样的内容。

4.4.1、删除重复行

将两行重复行压缩成一行
其中,\n表示回车
分析:表示匹配以 1 个或多个任意字符开头,并且回车前后的内容一样的,显然表示相同的两行
将多行重复行压缩成一行
其中,\n表示回车
分析:同上,不过多个了\+表示 1 个或多个!

4.4.2、交换列表中所有连字符分割的条目的顺序

eg:ABC:EDF执行该条命令后变成EDF:ABC

4.4.3、将所有 foo(a,b,c) 的实例改为 foo(b,a,c)

其中,[^,]*表示的是非逗号字符有 0 个或任意个。

4.4.4、查找 test 开头的后面为一个或多个空格,然后为一个单词,将 test 和这个单词调换位置

如果不想改变空格数量,可以这样写正则:
再来复习一个小知识点:
分析:该正则表达式与上面第一个区别:只在 5 到 10 行进行这样一个操作!

4.5、函数式

格式如下:
分析:与替换一样,只不过指定了替换内容为:\=函数式
例 1:将各行的 id 字符串替换成行号
分析:其中\<表示词首,\>表示词尾。
例 2:将每行开头的单词替换成(行号 - 10)

4.6、与 Perl 正则表达式区别

vim 语法
perl 语法
含义
+
+
1~ 任一个
?
?
0~1 个
{n,m}
{n,m}
n~m 个
()
()
分组

4.7、sed 用法【在 Linux 的 terminal 中执行】

  • 用来直接处理文件

4.7.1、删除所有空行

4.7.2、删除所有只包含空格或者制表符的行

4.7.3、删除所有引号

4.8、调试步骤

  • 1、化结构,把搜索这个表达式分成几部分
  • 2、把划出每部分\(\)写出
  • 3、填写每一部分表达式
  • 4、看是否高亮

参考资料

 
UVM常用的 Linux 基本操作
  • Twikoo
  • Waline
  • Giscus
  • Cusdis
  • Utterance
Conor
Conor
一个野生的技术宅
公告
type
status
date
slug
summary
tags
category
Property
Nov 25, 2023 06:32 AM
icon
password
属性
属性 1
描述
Origin
URL
🎉持续更新中🎉