前言
前面基本总结了Linux中一些文件的各种操作,后面开始为shell脚本的学习做好准备,这里开始总结vi和vim的内容,依旧参照《鸟哥的Linux私房菜》一书中的内容,本篇博客对应这本书中第九章的学习内容
三种模式
vi和vim都有三种模式——一般指令模式,编辑模式,命令行模式
三种模式的转换方式如上图所示
一般指令模式:我们vi指令打开文件,就进入了命令模式,在这个模式中,可以通过上下键来移动光标,可以删除字符或删除整行,也可以复制黏贴文件内容,同时通过相关按钮可以退出vi和vim
编辑模式:输入i,a,o按钮,或者insert和replace按键,进入到编辑模式,在编辑模式里头可以编辑文件内容,如果要退出该模式,按Esc键即可。
命令行模式:在一般指令模式中,输入 : ,/ , ? 三个按钮,光标会位于屏幕最底部,在这个模式中,我们可以搜索文档中的相关内容。
vi编辑器
通过vi命令创建一个文件,这个就太简单了,这里就不总结了,只是总结一下vi相关的快捷键
一般指令模式下可用的快捷键
移动光标的操作
按钮 | 效果 |
---|
h 或 ← | 光标向左移动一个字符 | j 或 ↓ | 光标向下移动一个字符 | k 或 ↑ | 光标向上移动一个字符 | l 或 → | 光标向右移动一个字符 | [Ctrl]+[f] | 屏幕向下移动一页,等同于Page Down | [Ctrl]+[b] | 屏幕向上移动一页,相当于Page Up | [Ctrl]+[d] | 屏幕向下移动半页 | [Ctrl]+[u] | 屏幕向上移动半页 | + | 光标移动到非空格符的下一列 | - | 光标移动到非空格符的上一列 | n<space> | n表示数字,按下数字键之后按空格,光标会向右移动这一列的n个字符。 | 0 或 Home键 | 移动到这一行开头 | $ 或 End键 | 移动到这一行的末尾 | H | 光标移动到这个屏幕的最上方那一列的第一个字符 | M | 光标移动到这个屏幕的中央那一列的第一个字符 | L | 光标移动到这个屏幕的最下方那一列的第一个字符 | G | 移动到这个文件的最后一列 | nG | n为数字,移动到这个文件的第n列 | gg | 移动到这个文件的第一列 | n<Enter> | n为数字,光标向下移动n列 |
搜寻与替换
按钮 | 效果 |
---|
/word | 向当前光标之下找寻第一个word的字符串。 | ?word | 向当前光标之上寻找一个字符串为word的字符串 | n | 这个不是数字,是英文n的按键,是next的意思,搜寻下一个匹配的字符 | N | 与n相反,搜寻上一个匹配的字符 | :n1,n2s/word1/word2/g | n1与n2为数字,在第n1列与n2列之间寻找word1这个字符串,并将字符串取代为word2 | :1,$s/word1/word2/g | 从第一列到最后一列寻找word1字符串,并将字符串word1替换成word2 | :1,$s/word1/word2/gc | 从第一列到最后一列寻找word1字符串,并将字符串替换word2,且在取代前给出提示信息 |
删除,复制与粘贴
按钮 | 效果 |
---|
x,X | 在一列字当中,x为向后删除一个字符(相当于del),X为向前删除一个字符(相当于backspace) | nx | n为数字,连续向后删除n个字符 | dd | 删除游标所在的那一整列 | ndd | n为数字,删除光标所在的向下n列 | d1G | 删除光标所在行到第一行的所有数据 | dG | 删除光标所在到最后一行的所有数据 | d$ | 删除游标所在处,到该列的最后一个字符 | d0 | 删除游标所在处,到该列的最前面的一个字符 | yy | 复制游标所在的那一行 | nyy | n为数字,复制光标所在的向下n列 | y1G | 复制光标所在列到第一行的所有数据 | yG | 复制光标所在列到最后一行的所有数据 | y0 | 复制光标所在的那个字符到该列行首的所有数据 | y$ | 复制光标所在的那个字符到该列行尾的所有数据 | p,P | p为将已复制的数据在光标下一行贴上,P则为贴在游标上一行 | J | 将光标所在行与下一行的数据结合成同一行 | c | 重复删除多个数据,比如向下删除10行 | u | 复原前一个动作(类似Ctrl+z) | [Ctrl]+r | 重做上一个动作 | . | 重复前一个动作 |
一般指令模式切换到编辑模式的按钮
按钮 | 作用 |
---|
i,I | 【进入插入模式】 i——从目前光标所在处插入。 I——在目前所在列的第一个非空格符处开始插入 | a,A | 【进入插入模式】 a——从目前光标所在的下一个字符处开始插入 A——从光标所在行的最后一个字符处开始插入 | o,O | 【进入插入模式】 o——目前光标所在的下一行出插入新的一行, O——在目前光标所在的上一行插入一行 | r,R | 【进入替换模式】 r——只会允许替换一次 R——可以替换多次,除非按下ESC退出替换模式为止 | Esc | 退出编辑模式,回到一般指令模式中 |
一般指令模式切换到指令模式
按钮 | 作用 |
---|
:w | 将编辑的数据写入到硬盘 | :w! | 文件属性为只读的时候,强制写入该文件 (能否写入,还要看权限) | :q | 退出vi | :q! | 不保存修改,直接退出 | :wq | 保存之后直接退出 | ZZ | 如果文件没有改动,则直接退出。 如果文件有改动,则保存退出 | :w [filename] | 将编辑的数据存储成另一个文件(类似另存为) | :r [filename] | 在编辑的数据中,读入另一个文件的数据 | :n1,n2 w [filename] | 将n1到n2的内容存储成filename这个文件 | :! command | 暂时离开vi,到指令模式下执行command的显示结果 例如::! ls /home 暂时离开vi 查询/home的文件,按Enter回到vi | :set nu | 显示行号 | :set nonu | 取消行号显示 |
鸟哥的linux中还有一个完整的实例,跟着走一遍,对vi的使用应该算是有较好的理解了。这里就不做总结了。
vim编辑器
vim具有颜色显示功能,同时还支持许多的程序语法,功能比vi丰富。上面总结的vi的操作,vim几乎都支持,还提供了很多额外的功能
区块选择
按钮 | 功能 |
---|
v | 从光标当前位置开始, 光标所经过的地方会被选中, 再按一下v结束 | V | 从光标当前行开始, 光标经过的行都会被选中, 再按一下V结束。 | Ctrl + v | 从光标当前位置开始, 选中光标起点和终点所构成的矩形区域, 再按一下Ctrl + v结束 | y | 复制选中的地方 | d | 删除选中的地方 | p | 粘贴刚选中的内容 |
多文件编辑
vim其实是支持多文件编辑的,只需要在vim命令之后同时接多个文件名即可
[root@localhost tmp]
vim下编辑多个文件的可用按键如下
按钮 | 功能 |
---|
:n | 编辑下一个文件 | :N | 编辑上一个文件 | :files | 列出当前vim编辑的所有文件 |
实例如下:
多窗口编辑
可以通过:sp {filename}指令,达到分窗口区域编辑文件的效果
:sp filename
在vim的命令窗口情况下输入上述命令,可将文本进行分区编辑。如下动图所示
这种情况下一些可用按钮如下所示
按钮 | 功能 |
---|
:sp [filename] | 开启一个窗口,如果没有filename, 则表示两个窗口编辑同一个文件内容 | ctrl+w+j/↓ | 移动到下方的编辑窗口 | ctrl+w+k/↑ | 移动到上方的编辑窗口 | ctrl+w+q | 等同于:q退出多窗口编辑 |
《鸟哥的Linux私房菜》一书中,总结了一些vim的快捷键和指令
关于换行符
vi和vim的使用还有些其他需要注意的,换行符是一个。
通常情况下windows下的换行符是CRLF,而Linux下的换行符时LF,如果我们在windows下编写了shell,需要放到linux下执行,这个时候需要注意换行符的处理。这需要用到dos2unix和unix2dos工具
[root@localhost vitest]
[root@localhost vitest]
这里不演示具体实例了
[root@localhost vitest]
man_db.conf man.test.config
[root@localhost vitest]
unix2dos: converting file man_db.conf to DOS format ...
[root@localhost vitest]
dos2unix: converting file man_db.conf to file man_db.conf.linux in Unix format ...
[root@localhost vitest]
man_db.conf: ASCII text, with CRLF line terminators
man_db.conf.linux: ASCII text
关于编码格式转换
每个文件编码格式的转换通过iconv 命令来处理
总结
简单梳理了一下vi和vim的常见按键和用法,后面进入到shell以及linux的进程、网络管理等内容的总结
|