Linux中运行的文本编辑器很多,每个人喜欢的也不一样。但是不同的Linux发行版一定会内置Vi编辑器,其它编辑器可能不会内置,需要自己安装。所以必须学会Vi的使用,以应对在不同的的Linux环境中文本的编辑。Vim编辑器是Vi编辑器的升级版,功能比Vi强大,并且兼容Vi的操作(本文只记录个人学习笔记,如有不对的地方请指正)
Vi编辑器有三个模式,分别是指令模式、插入模式和命令行模式。打开Vim时,首先进入指令模式,此模式下可以进行光标移动、删除、复制等操作;通过"i、I、a、A、o、O"六个指令进入插入模式,“r、R”两个指令进入替换模式,插入和替换模式是进行文本内容的插入修改,按下ESC键退出到指令模式;通过“:,/,?”进入命令行模式,此模式下进行查找替换、保存推出、文件读取等操作,按下ESC键退出到指令模式。插入模式与命令行模式不能互相切换,只能退出到指令模式在进行切换。
一、文件打开、关闭和保存
1、vi filename [...]
在Terminal中输入上面的命令打开文件。Vi后面可以跟多个文件名同时打开多个文件。如果打开filename文件不存在,则创建名为filename的文件。
2、按下“:”进入命令行模式,通过“q,w,!”三个命令进行文件的保存退出。
:q#不保存退出文件
:q!#不保存修改强制退出(!是强制退出的意思,不需要用户确认)
:w#保存
ZZ#快捷键,保存并退出
:w newfilename#另存为newfilename并退出
:n1,n2 w newfilename#将文件的第n1行到n2行的内容另存为名为newfilename的新文件
:wq#保存并退出
拓展:
:wq 强制性写入文件并退出。即使文件没有被修改也强制写入,并更新文件的修改时间。
:x 写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。
在编程方面,对编辑源文件可能会产生重要影响,":wq"强制更新文件的修改时间,就得重新编译链接生成可执行文件,会产生不必要的系统资源花销。
3、在命令行模式下可以通过“r,e”两个命令打开新文件。
:r filename#将filename的内容追加到正在编辑的文件末尾
:e filename#在打开Vim编辑器时未指定文件,则可通过此命令打开filename文件进行编辑
4、定位
:set nu #设置行号
:set nonu #取消行号
gg #光标移到第一行
G #光标移到最后一行
nG #光标移到第n行
:n #光标移到第n行
$ #光标移到行尾
0 #移到行首
5、删除
x #删除光标所在处字符
nx #删除光标所在处后n个字符
dd #删除光标所在行
ndd #删除n行(从当前光标所在行向后数n行)
dG #删除光标所在行到文件末尾内容
D #删除光标所在处到行尾内容
:n1,n2d #删除指定范围的行
6、复制和剪切
yy #复制当前行
nyy #复制当前行以后n行
dd #剪切当前行
ndd #剪切当前行以下n行
p、P #粘贴在当前光标所在行下或行上
7、替换和取消
r #取代光标所在处字符
R #从光标所在处开始
u #取消上一步操作
8、搜素和搜素替换
/string #搜索指定字符串
:set ic #忽略大小写
:setnoic #不忽略大小写
n #搜索指定字符串的下一个出现位置
:%s/old/new/g #全文替换指定字符串
:n1,n2s/old/new/g #在一定范围内替换指定字符串
常见用法:
1. 删除以#号开头的行:
:g/^#/d
:%s/^#.*\n
2. 删除以空格开头的行:
:g/^\s/d “\s代表空格”
:%s/^\s.*\n
3. 删除以空格#开头的注释行:
:g/^\ .*#/d “(.*)代表若干”
:%s/^\s.*#.*\n//g
4. 删除空白行:
:g/^$/d
:g/^\s*$/d “删除由空格组成的行”
:g/^[\s|\t]*$/d “删除由空格或tab键开头到结尾的行”
:g/^[ |\t]*$/d “删除由空格或tab键开头到结尾的行”
5. 删除行首空格:
:%s/^\s\+ “\+代表一个或多个\s”
6. 删除行末空格:
:%s/\s\+$
7. 加#注释所有行:
:%s/^/#/g
8. 查找注释掉的CONFIG:
/^#.*CONFIG.*$