vim编辑器
文本编辑器,字处理器
nano、sed
vi:Visual Interface(可视化接口)
vim:VI Improved
模式编辑器、全屏编辑器
一:打开文件
# vim /path/to/somefile
- vim +# /path/to/somefile 打开/path/to/somefile,并定位于文件第#行
- 例如1:打开文件/etc/inittab,光标在 18 行
# vim +18 /etc/inittab
- 例如1:打开文件/etc/inittab,光标在 18 行
- vim + /path/to/somefile 打开/path/to/somefile,并定位于该文件的底部
- 例如1:打开文件/etc/inittab,光标在 最后一行
# vim + /etc/inittab
- 例如1:打开文件/etc/inittab,光标在 最后一行
- vim +/PATTERN:打开文件,定位至第一次被PATTERN匹配到的行的行首
- 如:vim +/:initdefault /etc/inittab
编辑模式/命令模式:复制、粘帖、删除行...
输入模式:输入内容到文件
末行模式:文件管理命令
打开vim编辑器,默认处于编辑模式。
模式之间是可以相互转换的。
编辑 --> 输入
- i:在当前光标所在字符的前面,转换为输入模式;
- a:在当前光标所在字符的后面,转换为输入模式;
- o:在当前光标所在行的下面,新建一行,转换为输入模式;
大写字母
- I:在当前光标所在行的行首,转换为输入模式;
- A:在当前光标所在行的行尾,转换为输入模式;
- O:在当前光标所在行的上面,新建一行,转换为输入模式;
输入 --> 编辑
- ESC
编辑 --> 末行模式(只能从编辑模式进入)
- : 输入冒号即可
末行模式可以执行的命令:
- 10d:删除文件中的第十行
- 10,20d:删除文件中的第十行到第二十行;
- set nu:显示行号
- ! ls /etc/:执行shell命令,不影响当前文件编辑
末行模式 --> 编辑
- ESC,ESC
输入模式到末行模式不能直接转换;
二:关闭文件
- 末行模式关闭文件
- :q:退出,不保存,如果已经编辑了文件内容,这样无法退出,会提示你文件已经发生了改变,让你确认是否保存
- :wq:保存并退出
- :q!:不保存退出
- :w:保存,不退出
- :w!:强行保存只读文件(只读文件对管理员root是不生效的,管理员可以使用w!强行保存文件)
- :wq -- :x
- 编辑/命令模式下退出文件
- ZZ:保存退出(不用切换模式,就可以保存退出)
三:移动光标(编辑/命令模式)
- 逐字符移动:可以用上下左右键,也可以:
- h:左
- l:右
- j:下
- k:上
- 数字加上上面的移动键,可以向对应方向移动 n 个字符或行
- 逐单词移动
- w:向后移动到下个单词的词首
- e:向后跳到当前或下一个单词的词尾
- b:向前跳至当前或前一个单词的词首
- 上述命令都支持加上数字,如:3w,4b,可以实现移动 n 个单词
- 行内跳转/移动
- 0:行首,绝对行首
- ^:行首,行首的第一个非空白字符,相对行首
- $:行尾,绝对行尾
- 行间跳转
- G:跳至最后一行
- #G:向下跳至第#行行首
末行模式下跳转:直接给出行号,回车即可
四、翻屏操作
- Ctrl+f:向下翻一屏,向文件尾部翻一屏
- Ctrl+b:向上翻一屏,向文件首部翻一屏
- Ctrl+d:向下翻半屏
- Ctrl+u:向上翻半屏
五、删除单个字符
- x:删除光标所在处的单个字符
- #x:删除光标所在处及向后的共#个字符
六、删除命令d
- d命令可以结合光标跳转命令一起使用,实现不同的删除效果。如:
- d$:删除当前光标处到行尾的内容
- d0:删除当前光标处到行首的内容
- dw:逐个单词删除
- 3dw:一次删除三个单词
- #de:
- #db:
- dd:删除当前光标所在行
- #dd:删除从光标所在行向下删除#行
- 删除第10行到第20行(末模式下:1,8d)
- 末行模式下删除指定行
- :.,+5d:末行模式下删除从当前行开始到向下的5行,一共删了6行
- (.表示当前行,$表示最后一行,+#表示想下的#行);
- 当前行到倒数第三行:.,$-3
- .:表示当前行
- $:表示最后一行
- +#:表示向下的#行
七、粘贴命令:p
- 删除的内容并没有立即清除,而是保存在内存缓冲区中的。
- 最后一次删除的内容,可以被粘贴到任意指定的地方,可以粘贴多次;
- P:
- 如果删除的或复制的为整行内容,则粘贴至光标所在处的下放;
- 如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面;
- p:
- 如果删除的或复制的为整行内容,则粘贴至光标所在处的上放;
- 如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面;
八、复制命令:y
- 用法同d命令
- yy:复制一行
- 3yy、y0、y$...
九、先删除内容,再转换为输入模式(即:替换或修改)
- c:用法同d命令
十、替换命令
- r:替换单个字符
- R:进入替换模式,类似insert键。ESC退出替换模式
十一、撤销编辑
- u:undo,撤销前一次的编辑操作,可以连续使用u,撤销前n次的编辑操作
- 注意:vi或vim只在内存缓冲区中保存最近50次的编辑操作,也就是说我们最多只能撤销最近50次的编辑操作
- #u:直接撤销最近#次的编辑操作。
撤销撤销:撤销/还原上一次的撤销操作:Ctrl+r
十二、重复前一次的编辑操作
- .:点,功能强大的点
十三、可视化模式
- v:按字符选取,选取后可以执行上面所有的编辑操作(d删除,y复制等)
- V:按矩形块选取,按行选取
十四、查找
- /PATTERN:从文件首部到尾部查找
- ?PATTERN:从当前光标所在行,到文件首部,倒着查找
- n:下一个,往下跳转下一个
- N:上一个,往上跳转下一个
十五、查找并替换
在末行模式下使用s命令,用法与sed一模一样。
- 语法:ADDR1,ADDR2s@PATTERN@STRING@gi
- @:分隔符
- s:查找
- g:替换
- i:忽略字符大小写
例如:将文档中从当前行(.)开始到文档底部的所有小写的he替换为大写的HE
:.,$-1s/he/HE/g
全文替换:
:1,$ 或者 :%
1,$,表示从第一行到最后一行,百分号也是指全文。
练习题:
将/etc/yum.repos.d/server.repo文件中的ftp://instructor.example.com/pub替换为http://172.16.0.1/yum
key
%s/ftp:\/\/instructor\.example\.com\/pub/http:\/\/172.16.0.1\/yum/gi
%s@ftp://instructor\.example\.com\/pub@http://172.16.0.1/yum@gi
十六、如何打开多个文件
vim FILE1 FILE2 FILE3
:next:切换至下一个文件
:prev:切换至前一个文件
:last:切换至最后一个文件
:first:切换至第一个文件
vim rc.local init
默认显示第一个文件;
切换到下个文件:next
切换到上个文件:prev(注意:切换到上个文件之前,必须保存编辑过的这个文件,否则切换不过去的)
退出:全部退出
:qa
:qall
十七、分屏显示一个文件
看着前面的内容来编辑后面的内容
Ctrl+w,s :水平拆分窗口
Ctrl+w,v :垂直拆分窗口
切换窗口:Ctrl+w,ARROW(上下左右方向箭头)
退出:
:q 退出一个窗口
:qa 全部退出,关闭所有窗口
--------------------------------------------------------
水平拆分窗口:
Ctrl+w,松开后,再按 s
Ctrl+w+向下/上的箭头,切换光标到上/下面的窗口编辑。
垂直拆分窗口:
Ctrl+w,松开后,再按 v
十八、分窗口显示多个文件
窗口1显示文件1,窗口2显示文件2
水平分割显示,如:vim -o FILE1 FILE2
垂直分割显示,如:vim -O FILE1 FILE2
十九、将当期文件的部分内容另存为另外一个文件
末行模式下使用w命令
:w
:w /path/to/somewhere
:ADDR1,ADDR2w /path/to/somewhere
二十、将另外一个文件内容填充在当前文件中(合并两个文件)
:r /path/to/somefile
二十一、跟shell交互
末行模式下输入:
:! COMMAND
#COMMAND不支持alias别名命令
二十二、高级话题
1、显示或取消显示行号
:set number -- set nu
:set nonu
2、忽略或区分字符大小写
:set ic
:set ignorecase
:set noic
:set noignorecase
3、设定自动缩进(写脚本的时候很有用)
:set autoindent
:set ai
:set noai
4、设定高亮显示(查找到的文本高亮显示)
:set hlsearch
:set nohlsearch
5、语法高亮
:syntax on
:syntax off
二十三、vim配置文件
全局:vim /etc/vimrc
局部(用户级):vim ~/.vimrc
关于vim的练习题:
系统自带的vimtutor,每天做一遍,每次控制在半小时内搞定,就成了。