vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim)。vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率。vi是“visual interface”的缩写,vim是vi IMproved(增强版的vi)。在一般的系统管理维护中vi就够用,如果想使用代码加亮的话可以使用vim。下面vps侦探整理一下vi的使用教程:包含vi的基本介绍、使用模式、文件的打开关闭保存、插入文本或新建行、移动光标、删除、恢复字符或行、搜索等等,算是一篇比较适合新手学习vi的教程。 vi有3个模式:插入模式、命令模式、低行模式。
插入模式:在此模式下可以输入字符,按ESC将回到命令模式。 命令模式:可以移动光标、删除字符等。
低行模式:可以保存文件、退出vi、设置vi、查找等功能(低行模式也可以看作是命令模式里的)。 一、打开文件、保存、关闭文件(vi命令模式下使用) vi filename //打开filename文件 :w //保存文件
:w vpser.net //保存至vpser.net文件
:q //退出编辑器,如果文件已修改请使用下面的命令 :q! //退出编辑器,且不保存 :wq //退出编辑器,且保存文件
二、插入文本或行(vi命令模式下使用,执行下面命令后将进入插入模式,按ESC键可退出插入模式) a //在当前光标位置的右边添加文本 i //在当前光标位置的左边添加文本 A //在当前行的末尾位置添加文本
I //在当前行的开始处添加文本(非空字符的行首) O //在当前行的上面新建一行 o //在当前行的下面新建一行
R //替换(覆盖)当前光标位置及后面的若干文本
J //合并光标所在行及下一行为一行(依然在命令模式) 三、移动光标(vi命令模式下使用) 1、使用上下左右方向键
2、命令模式下:h 向左、j 向下 、k 向上、l 向右。
空格键 向右、Backspace 向左、Enter 移动到下一行首、- 移动到上一行首。 四、删除、恢复字符或行(vi命令模式下使用) x //删除当前字符
nx //删除从光标开始的n个字符 dd //删除当前行
ndd //向下删除当前行在内的n行 u //撤销上一步操作
U //撤销对当前行的所有操作 五、搜索(vi命令模式下使用)
/vpser //向光标下搜索vpser字符串 ?vpser //向光标上搜索vpser字符串 n //向下搜索前一个搜素动作 N //向上搜索前一个搜索动作 六、跳至指定行(vi命令模式下使用) n+ //向下跳n行 n- //向上跳n行
nG //跳到行号为n的行 G //跳至文件的底部
七、设置行号(vi命令模式下使用) :set nu //显示行号
:set nonu //取消显示行号
八、复制、粘贴(vi命令模式下使用)
yy //将当前行复制到缓存区,也可以用 \复制,\为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。
nyy //将当前行向下n行复制到缓冲区,也可以用 \复制,\为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。 yw //复制从光标开始到词尾的字符。 nyw //复制从光标开始的n个单词。
y^ //复制从光标到行首的内容。 VPS侦探 y$ //复制从光标到行尾的内容。
p //粘贴剪切板里的内容在光标后,如果使用了前面的自定义缓冲区,建议使用\进行粘贴。 P //粘贴剪切板里的内容在光标前,如果使用了前面的自定义缓冲区,建议使用\进行粘贴。 九、替换(vi命令模式下使用)
:s/old/new //用new替换行中首次出现的old :s/old/new/g //用new替换行中所有的old
:n,m s/old/new/g //用new替换从n到m行里所有的old :%s/old/new/g //用new替换当前文件里所有的old 十、编辑其他文件
:e otherfilename //编辑文件名为otherfilename的文件。 十一、修改文件格式
:set fileformat=unix //将文件修改为unix格式,如win下面的文本文件在linux下会出现^M。 总结:vi(vim)教程虽然有比较多的命令,但是只要勤加练习,相信你会很快的熟练掌握,同时也会给你的工作或学习带来更高的效率。当如果不知道自己处在什么模式时可以按2次Esc键即可回到命令模式,会有最后提醒一点:注意大小写!!!
光标控制命令
命令 光标移动
h或^h 向左移一个字符 j或^j或^n 向下移一行 k或^p 向上移一行
l或空格 向右移一个字符 G 移到文件的最后一行 nG 移到文件的第n行 w 移到下一个字的开头
W 移到下一个字的开头,忽略标点符号 b 移到前一个字的开头
B 移到前一个字的开头,忽略标点符号 L 移到屏幕的最后一行 M 移到屏幕的中间一行 H 移到屏幕的第一行 e 移到下一个字的结尾
E 移到下一个字的结尾,忽略标点符号 ( 移到句子的开头 ) 移到句子的结尾 { 移到段落的开头
} 移到下一个段落的开头 0或| 移到当前行的第一列 n| 移到当前行的第n列
^ 移到当前行的第一个非空字符 $ 移到当前行的最后一个字符
+或return 移到下一行的第一个字符 - 移到前一行的第一个非空字符
在vi中添加文本
命令 插入动作
a 在光标后插入文本 A 在当前行插入文本 i 在光标前插入文本 I 在当前行前插入文本
o 在当前行的下边插入新行 O 在当前行的上边插入新行
:r file 读入文件file内容,并插在当前行后 :nr file 读入文件file内容,并插在第n行后 escape 回到命令模式
^v char 插入时忽略char的指定意义,这是为了插入特殊字符
在vi中删除文本
命令 删除操作
x 删除光标处的字符,可以在x前加上需要删除的字符数目
nx 从当前光标处往后删除n个字符
X 删除光标前的字符,可以在X前加上需要删除的字符数目 nX 从当前光标处往前删除n个字符 dw 删至下一个字的开头
ndw 从当前光标处往后删除n个字 dG 删除行,直到文件结束 dd 删除整行
ndd 从当前行开始往后删除 db 删除光标前面的字
ndb 从当前行开始往前删除n字 :n,md 从第m行开始往前删除n行 d或d$ 从光标处删除到行尾
dcursor_command 删除至光标命令处,如dG将从当产胆行删除至文件的末尾 ^h或backspace 插入时,删除前面的字符 ^w 插入时,删除前面的字
修改vi文本
每个命令前面的数字表示该命令重复的次数 命令 替换操作
rchar 用char替换当前字符
R text escape 用text替换当前字符直到换下Esc键 stext escape 用text代替当前字符 S或cctext escape 用text代替整行 cwtext escape 将当前字改为text
Ctext escape 将当前行余下的改为text cG escape 修改至文件的末尾
ccursor_cmd text escape 从当前位置处到光标命令位置处都改为text
在vi中查找与替换
命令 查找与替换操作
/text 在文件中向前查找text ?text 在文件中向后查找text n 在同一方向重复查找 N 在相反方向重复查找
ftext 在当前行向前查找text Ftext 在当前行向后查找text
ttext 在当前行向前查找text,并将光标定位在text的第一个字符 Ttext 在当前行向后查找text,并将光标定位在text的第一个字符 :set ic 查找时忽略大小写
:set noic 查找时对大小写敏感
:s/oldtext/newtext 用newtext替换oldtext
:m,ns/oldtext/newtext 在m行通过n,用newtext替换oldtext & 重复最后的:s命令
:g/text1/s/text2/text3 查找包含text1的行,用text3替换text2
:g/text/command 在所有包含text的行运行command所表示的命令
:v/text/command 在所有不包含text的行运行command所表示的命令
在vi中复制文本
命令 复制操作
yy 将当前行的内容放入临时缓冲区 nyy 将n行的内容放入临时缓冲区 p 将临时缓冲区中的文本放入光标后 P 将临时缓冲区中的文本放入光标前
\复制n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行 \删除n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行 \将名字为圆括号的可命名缓冲区的内容放入当前行后 \将名字为圆括号的可命名缓冲区的内容放入当前行前
在vi中撤消与重复
命令 撤消操作
u 撤消最后一次修改
U 撤消当前行的所有修改 . 重复最后一次修改
, 以相反的方向重复前面的f、F、t或T查找命令 ; 重复前面的f、F、t或T查找命令
\取回最后第n次的删除(缓冲区中存有一定次数的删除内容,一般为9) n 重复前面的/或?查找命令
N 以相反方向重复前面的/或?命令
保存文本和退出vi
命令 保存和/或退出操作 :w 保存文件但不退出vi
:w file 将修改保存在file中但不退出vi :wq或ZZ或:x 保存文件并退出vi :q! 不保存文件,退出vi
:e! 放弃所有修改,从上次保存文件开始再编辑
vi中的选项
选项 作用
:set all 打印所有选项
:set nooption 关闭option选项 :set nu 每行前打印行号
:set showmode 显示是输入模式还是替换模式 :set noic 查找时忽略大小写
:set list 显示制表符(^I)和行尾符号 :set ts=8 为文本输入设置tab stops