目录
一、vi三种模式
vi分为3种模式,分别是“一般模式”、“编辑模式”、“命令行模式”。
- 一般模式:光标移动、搜索、替换、删除字符、删除整行、复制整行、粘贴整行
- 编辑模式:可输入任何字符
- 命令行模式:读取、存储文件以及其他附加功能
二、命令行内容说明
一般模式
一般模式:移动光标的方法 | |
---|---|
h或← | 光标向左移动一个字符 |
j或↓ | 光标向下移动一个字符 |
k或↑ | 光标向上移动一个字符 |
l或→ | 光标向右移动一个字符 |
如果想要进行多次移动的话,例如向下移动30行,可以使用“30j”或“30↓”的组合键,即加上想要进行的次数(数字)后,操作即可。 | |
Ctrl+[f]或PgDn | 屏幕“向下”移动一页 |
Ctrl+[b]或PgUp | 屏幕“向上”移动一页 |
Ctrl+[d] | 屏幕“向下”移动半页 |
Ctrl+[u] | 屏幕“向上”移动半页 |
+ | 光标移动到非空格符的下一行 |
- | 光标移动到非空格符的上一行 |
n<space> | n表示“数字”,例如 20。按下数字后再按空格键,光标会向右移动这一行的n个字符。例如20<space>则光标向后面移动20个字符的距离 |
0 | 这是数字“0”:移动到这一行的最前面字符处 |
$ | 移动到这一行的最后面字符处 |
H | 光标移动到这个屏幕的最上方那一行 |
M | 光标移动到这个屏幕的中央那一行 |
L | 光标移动到这个屏幕的最下方那一行 |
G | 光标移动到这个文件的最后一行 |
nG | n为数字。移动到这个文件的第n行。例如20G则会移动到这个文件的第20行(可配合 :set nu) |
gg | 移动到这个文件的第一行,相当于1G |
n<Enter> | n为数字。光标向下移动n行 |
一般模式:搜索与替换 | |
/word | 从光标位置开始,向下寻找一个名为word的字符串。例如要在文件内搜索vbird这个字符串,就输入/vbird即可 |
?word | 从光标位置开始,向上寻找一个名为word的字符串 |
n | n是英文按键。表示“重复前一个搜索的动作”。举例来说,如果刚刚执行/vbird去向下搜索vbird字符串,则按下n后,会向下继续搜索下一个名称为vbird的字符串。如果执行?vbird的话,那么按下n,会向上继续搜索名称为vbird的字符串 |
N | 这个N是英文按键。与n刚好相反,为“反向”进行前一个搜索动操作。例如/vbird后,按下N则表示“向上”搜索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。且在替换前显示提示符给用户确认(conform)是否需要替换 |
一般模式:删除、复制与粘贴 | |
x,X | 在一行字中,x为向后删除一个字符(相当于[Del ]键),X为向前删除一个字符(相当于[backspace]即退格键) |
nx | n为数字,连续向后删除n个字符。举例来说,要连续删除10个字符,则输入“10x” |
dd | 删除光标所在的那一整行 |
ndd | n为数字。从光标位置开始,删除向下n行,例如20dd则是删除20行 |
d1G | 删除光标所在位置到第一行的所有数据 |
dG | 删除光标所在位置到最后一行的所有数据 |
d$ | 删除光标所在为位置到该行的最后一个字符 |
d0 | d的后面是数字0,删除光标所在处,到该行的最前面一个字符 |
yy | 复制光标所在的那一行 |
nyy | n为数字。复制光标所在的向下n行,例如20yy则是复制20行 |
y1G | 复制光标所在行到第一行的所有数据 |
yG | 复制光标所在行到最后一行的所有数据 |
y0 | 复制光标所在的那个字符到该行行首的所有数据 |
y$ | 复制光标所在的那个字符到该行行尾的所有数据 |
p,P | p为将已复制的数据粘贴到光标的下一行,P为贴到光标的上一行。举例来说,当前光标在第20行,且已经复制了10行数据。则按下p后,那10行数据会贴在原来的20行之后,即由21行开始贴。但如果是按下P,那么原来的第20行会被变成30行 |
J | 将光标所在行与下一行的数据结合成同一行 |
c | 重复删除多个数据,例如向下删除10行,[10cj] |
u | 复原前一个操作 |
[Ctrl]+r | 重做上一个操作 |
u与[Ctrl]+r是很常用的命令。一个是复原,另一个是重做一次。利用这两个功能按键,编辑起来就得心应手。 | |
. | 这就是小数点。意思是重复前一个动作。如果想重复删除、复制粘贴,按下小数点“.”就可以 |
编辑模式
进入编辑模式 | |
i、I | 插入:在当前光标所在处插入输入文字,已存在的文字会向后退;其中,i为“从当前光标所在处插入”,I为“在当前所在行的第一个非空格符处开始插入” |
a、A | a为“从当前光标所在的下一个字符处开始插入”,A为“从光标所在行的最后一个字符处开始插入” |
o、O | 这是英文字母o的大小写。o为“在当前光标所在的下一行处插入新的一行”;O为“在当前光标所在处的上一行插入新的一行” |
r、R | 替换:r会替换光标所在的那一个字符;R会一直替换光标所在的文字,直到按下Esc键为止 |
使用上面这些按键时,在vi画面的左下角会出现“--INSERT”或“--REPLACE--”的字样。通过名称就知道是什么操作。特别注意,上面也提过了,想在文件中输入字符时,一定要在左下角处看到INSERT/REPLACE才能输入 | |
Esc | 退出编辑模式,回到一般模式中 |
命令行模式
命令行模式 | |
:w | 将编辑的数据写入硬盘文件中 |
:w! | 若文件属性为“只读”时,强制写入该文件。不过,到底能不能写入,与文件权限有关 |
:q | 离开vi |
:q! | 若曾修改过文件,又不想存储,使用!为强制离开不存储文件 |
注意一下,那个感叹号(!)在vi当中,常常具有“强制”的意思。 | |
:wq | 存储后离开,若为 :wq! 则为强制存储后离开 |
:e! | 将文件还原到最原始的状态 |
ZZ | 若文件没有更改,则不存储离开,若文件已经更改,则存储后离开 |
: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 nu相反,取消行号 |
三、vim的附加功能
块选择
按键 | 块选择的按键意义 |
v | 字符选择,会将光标经过的地方反白选择 |
V | 行选择,会将光标经过的行反白选择 |
[Ctrl]+v | 块选择,可以用长方形的方式选择数据 |
y | 复制反白的地方 |
d | 将反白的地方删除掉 |
多文件编辑
按键 | 意义 |
:n | 编辑下一个文件 |
:N | 编辑上一个文件 |
:files | 列出当前vim打开的所有文件 |
多窗口功能
按键 | 功能 |
:sp [filename] | 打开一个新窗口,如果加 filename ,表示在新窗口打开一个新文件,否则表示两个窗口为同一个文件内容(同步显示) |
[Ctrl]+wj | 按键的按法是:先按下[Ctrl不放,再按下w后放开所有的按键,然后再按下j,则光标可移动到下方的窗口 |
[Ctrl]+wk | 同上,不过光标移动到上面的窗口 |
[Ctrl]+wq | 其实就是 :q 结束离开。举例来说,如果想结束下方的窗口,利用[Ctrl]+wj 键移到下方窗口后,按下 :q 即可离开,也可以按下[Ctrl]+wq 键 |
vim环境设置
参数 | 说明 |
:set nu | 设置行号。取消的话,就是 :set nonu |
:set hlsearch | 设置是否将搜索的字符串反白。默认是 hlsearch ,如果不想反白,就用 :set nohlsearch |
:set autoindent | 是否自动缩排。autoindent是自动缩排,不想缩排就用 :set noautoindent |
:set backup | 是否自动存储备份文件。一般用 nobackup ,如果设置 backup ,当你更改任何一个文件时,则源文件会被另存为一个名为 filename~的文件。举例来说,我们编辑hosts,设置:set backup ,那么当更改hosts时,在同一目录下,就会产生hosts~文件名的文件,记录原始的hosts文件内容 |
:set ruler | 设置是否在右下角显示状态行说明 |
:set showmode | 是否在左下角的状态行显示--INSERT-- |
:set backspace=(012) | 一般来说,如果按下i进入编辑模式后,可以利用退格键(backspace)来删除任意字符。但是,某些版本则不允许这样做。此时就可以通过backspace来设置。当backspace为2时,可以删除任意值;0或1时,仅可以删除刚刚输入的字符,而无法删除原来就已经存在的文字 |
:set all | 显示当前所有的环境参数设置值 |
:syntax(off|on) | 是否根据程序相关语法显示不同的颜色。举例来说,在编辑一个纯文本文件时,如果是以#开始,那么该行就会变成蓝色。如果你懂得写程序,那么这个 :syntax on 还会主动帮你调试。但是,如果仅是编写纯文本文件,要避免颜色对屏幕产生的干扰,则可以取消这个设置 :syntax off |
四、DOS与Linux的换行符
我们利用cat -A来观察DOS(Windows系统)建立的特殊文件格式,可以发现DOS使用的换行符为 ^M$ ,我们称为CR与LF两个符号;而在Linux中,则仅有LF($)这个换行符。在开始执行Linux命令时,它的判断依据是“Enter”,而Linux的Enter为LF符号,不过,DOS的换行符是CRLF,就多了一个^M的符号,在这样的情况下,如果是一个shell脚本的程序文件,将可能造成“程序无法执行”的状态。
因为换行符以及DOS与Linux操作系统中一些字符的定义不同,因此,不建议在Windows系统中将文件编辑好之后,才上传到Linux系统,这样容易发生错误。而且,如果在不同系统之间复制一些纯文本文件时,千万要用unix2dos或dos2unix来转换格式。
dos2unix [-kn] file [newfile]
unix2dos [-kn] file [newfile]
参数:
-k :保留该文件原来的mtime时间格式(不更新文件上次内容经过修改的时间)
-n :保留原来的旧文件,将转换后的内容输出到新文件,如 dos2unix -n old new
根据鸟哥的Linux私房菜基础学习篇(第二版)整理,供大家学习使用
如果对你有帮助,动动手指点个赞吧~