# vim程序编辑器

  • 系统管理员的重要工作就是要修改与设置某些重要软件的配置文件,因此至少要学会一种以上的命令行模式下的文本编辑器。在所有的Linux发行版上面都会有一个文本编辑器,那就是vi,而且很多软件默认也是使用vi作为它们的编辑工具。此外vim是vi的高级班,可以用不同颜色显示文件内容,还可以进行诸如shell脚本、c语言等程序编辑,可以视为vim是一种程序编辑器。
  • Linux下面的配置文件多为ASCLL纯文本文件,故使用vim即可进行设置编辑。
  • vim可视为程序编辑器,可用以编辑shell脚本,配置文件等。
  • vi为所有UNIX-like的操作系统都会存在的编辑器,且执行速度快。
  • vi有三种模式,一般命令模式可切换到编辑模式与命令行模式,但编辑模式与命令行模式不能直接切换。
    • 一般命令模式(command mode),以vi打开一个任意文件就直接进入一般命令模式了,但是无法编辑文件。
    • 编辑模式(insert mode),在一般命令模式下按下【i、I、o、O、a、A、r、R】其中任何一个字母即可进入编辑模式。通过在Linux中,按下这些按键时,界面下面会出现【INSERT】和【REPLACE】的字样,此时即可编辑文本了。如果要回到一般命令模式下,按下【esc】即可。
    • 命令行模式(command-line mode),在一般命令模式下按下【: / ?】其中任何一个按键,就可以将光标移动到界面最下面一行。在这个模式中,可以提供【查找数据】等操作,而读取、保存、批量替换字符、退出vi、显示行号等操作也是在此模式中完成。
  • 常用的按键有i、[esc]、:wq等。
  • vi的界面大略可分为两部分:上半部分的本文、最后一行的状态+命令行模式。
  • 数字是有意义的,用来说明重复进行几次操作的意思,如5yy为复制5行之意。
  • 光标的移动中,大写的G经常使用,尤其是1G与G移动到文章的头/尾功能。
  • vi的替换功能也很棒,:n1,n2s/old/new/g要特别注意学习起来。
  • 小数点【.】为重复进行前一次操作,也是经常使用的按键功能。
  • 进入编辑模式几乎只要记住:i、o、R三个按键即可,尤其是新增一行的o与替换的R。
  • vim会主动的建立swap缓存,所以不要随便掉线。
  • 如果在文章内有对齐的区块,可以使用[ctrl]-v进行复制、粘贴、删除的操作。
  • 使用:sp功能可以划分窗口。
  • 若使用vim来编写网页,若需要CSS元素数据,可通过[ctrl]+x、[ctrl]+o这两个连续组合键来取得关键词。
  • vim的环境设置可以写入在~/.vimrc文件中。
  • 可以使用iconv进行文件语系编码的转换。
  • 使用dos2unix及unix2dos可以变更文件每一行的行尾换行符。

# 按键说明

# 一般命令模式

# 移动光标的方法

如果你将右手放在键盘上,会发现hjkl是排在一起的,因此可以用这四个按键来移动光标。如果想进行多次移动的话,例如向下移动30行,可以使用"30j"或"30下箭头"的组合按键,亦即加上想要进行的次数(数字)后即可。

按键 作用
h或左箭头(←) 光标向左移动一个字符。
j或下箭头(↓) 光标向下移动一个字符。
k或上箭头(↑) 光标向上移动一个字符。
l或右箭头(→) 光标向右移动一个字符。
Ctrl + f 屏幕【向下】移动一页,相当于Page Down按键。(常用)
Ctrl + b 屏幕【向上】移动一页,相当于Page Up按键。(常用)
Ctrl + d 屏幕【向下】移动半页。
Ctrl + u 屏幕【向上】移动半页。
+ 光标移动到非空格行的下一行。
- 光标移动到非空格行的上一行。
n<space> n表示【数字】,例如20,按下数字后再按空格键,光标会向右移动这一行的n个字符,例如20<space>则光标会向后面移动20个字符距离。
0或功能键[home] 这是数字【0】,移动到这一行的最前面字符处。(常用)
$或功能键[end] 移动到这一行的最后面字符。(常用)
H 光标移动到这个屏幕的最上方那一行的第一个字符。
M 光标移动到这个屏幕的中央那一行的第一个字符。
L 光标移动到这个屏幕的最下方那一行的第一个字符。
G 移动到这个文件的最后一行。(常用)
nG n为数字,移动到这个文件的第n行,例如20G则会移动到这个文件的第20行(可配合 :set nu)
gg 移动到这个文件的第一行,相当于1G。(常用)
n<Enter> n为数字,光标向下移动n行。(常用)

# 查找与替换

/word配合n和N可以让你重复的找到关键词。

按键 作用
/word 向光标之下寻找一个名为word的字符串。例如要在文件内查找vbird这个字符串,就输入/vbird即可。(常用)
?word 向光标之上寻找一个字符串名称为word的字符串。
n 这个n是英文按键,代表【重复前一个查找操作】。举例来说,刚执行了/vbird,再按下n相当于再执行一次。
N 与n相反,为【反向】进行前一个操作,例如/vbird,现在就为向上的?vbird。
:n1,n2s/word1/word2/g n1与n2为数字,在第n1与n2之间寻找word1字符串,并将该字符串替换为word2。举例来说,在100-200行之间查找vbird并替换为VBIRD的按键为::100,200s/vbird/VBIRD/g常用
:1,$s/word1/word2/g 从第一行到最后一行寻找word1字符串,并将该字符串替换为word2。常用
:1,$s/word1/word2/gc 从第一行到最后一行寻找word1字符串,并将该字符串替换为word2。且在替换前提示用户是否需要替换。常用

# 删除、复制与粘贴

u与[Ctrl] + r是很常用的命令。一个是恢复,另一个则是重做一次。相当于撤退编辑与重做编辑。

按键 作用
x与X 在一行中,x为向后删除一个字符(相当于[del]按键),X为向前删除一个字符(相当于[Backspace]退格键)。常用
nx n为数字,为连续删除n个字符。
dd 删除(剪切)光标所在的那一整行。常用
ndd n为数字,删除光标向下n行。常用
d1G 删除(剪切)光标所在到第一行的所有数据。
dG 删除(剪切)光标所在到最后一行的所有数据。
d$ 删除(剪切)光标所在处,到该行最后一个字符。
d0 那个是数字0,删除(剪切)光标所在处,到该行的最前面一个字符。
yy 复制光标所在的那一行。常用
nyy n为数字,复制光标所在的向下n行。常用
y1G 复制光标所在行到第一行的所有数据。
yG 复制光标所在行到最后一行的所有数据。
y0 复制光标所在的那个字符到该行行首的所有数据。
y$ 复制光标所在的那个字符到该行行尾的所有数据。
p与P p为将已复制的数据在光标的下一行粘贴,P则贴在光标的上一行。举例来说,我目前的光标在第20行,且已经复制了10行数据,则按下p后,那10行数据会贴在原本的20行之后,即由21行开始贴,但如果是按下P呢?那么原本的第20行会被推到变成30行。常用
J 将光标所在行与下一行的数据结合成一行。
c 重复删除多个数据,例如向下删除10行。[10cj]
u 恢复上一个操作。常用
[Ctrl]+ r 重做上一个操作。常用
. 小数点,重复前一个操作。如果想要重复删除、重复粘贴等操作,按下小数点【.】即可。常用

# 一般命令模式切换到编辑模式的可用的按键说明

# 进入插入或替换的编辑模式

进入编辑模式时,在左下角能够看见【--INSERT--】或【--REPLACE--】的字样。当想在文件输入字符时,就需要进入编辑模式。

按键 作用
i与I 进入插入模式(Insert mode)。
i为【从目前光标所在出插入】,I为【在目前所在行的第一个非空格处开始插入】。常用
a与A 进入插入模式(Insert mode)。
a为【从目前光标所在的下一个字符处开始插入】,A为【从光标所在行的最后一个字符处开始插入】。常用
o与O 进入插入模式(Insert mode)。
这是英文字母o的大小写,o为【在目前光标所在的下一行处插入新的一行】,O为【在目标光标所在的上一行插入新的一行】。常用
r与R 进入替换模式(Replace mode)。
r只会替换光标所在的那一个字符一次,R会一直替换光标所在的文字,知道按下ESC为止。常用
[Esc] 退出编辑模式,回到一般命令模式。常用

# 一般命令模式切换到命令行模式的可用按键说明

# 命令行模式的保存、退出等命令

!在vi当中,常常具有【强制】的意思。

按键 作用
:w 将编辑的数据写入硬盘文件中。常用
:w! 若文件属性为【只读】时,强制写入文件。不过,到底能否写入,还得跟你对该文件的文件权限有关。
:q 退出vi。常用
:q! 若修改文件,又不想保存,使用!为强制退出不保存。
:wq 保存后退出,若为:wq!为强制保存后退出。常用
ZZ 这是大写的Z,若文件没有修改,则不保存退出,若文件已经修改,则保存后退出。
:w [filename] 将编辑的文件保存为另一个文件。(类似另存为文件)
:r [filename] 在编辑的内容中,读入另一个文件的数据,亦将【filename】这个文件内容加到光标所在行后面。
:n1,n2 w [filename] 将n1到n2的内容保存为filename这个文件。
:! command 暂时退出vi到命令行模式下执行command的显示结果。例如【:! ls /home】即可在vi当中查看/home下面以ls输出的文件信息。
:set nu 显示行号,设置后,每一行前缀显示该行的行号。
:set nonu 与set su相反,为取消行号。
最近更新时间: 2020/9/6 11:30:38