- vi与vim
- vi的使用
- 其他vim使用注意事项
在所有的Linux发行版上都会有的编辑器就是vi,而且很多软件默认也是是使用vi作为他们的编辑工具。vim是高级版的vi,vim不但可以用不同颜色显示文字内容,还能够进行诸如 shell脚本、C语言等程序编辑。
vi与vim
在Linux的系统中使用文本编辑器来编辑Linux参数配置文件是一件很重要的事情,至少应该要熟悉一种文本处理工具
Linux命令行模式下的文本编辑器:emacs、pico、nano、joe、vim
为什么要学vim
- 所有的UNIX-like 系统都会内置vi文本编辑器,其他的文本编辑器则不一定会存在
- 很多软件的编辑接口都会主动调用vi(例如crontab、visudo、edquota等命令)
- vim具有程序编辑的能力,可以主动地以字体颜色辨别语法的正确性,方便程序设计
- vim程序简单,编辑速度相当快速
简单来说:
vi是老式的文本编辑器,不过功能已经很齐全了,但是还是有可以进步的地方。
vim里面加入了很多额外的功能,例如支持正则表达式的查找方式、多文本编辑、区块复制等,vim是一个程序开发工具而不只是文本处理软件,
vi的使用
vi共分3种模式,分别为一般命令模式、编辑模式与命令行模式
一般命令模式可与编辑模式及命令行模式切换,但编辑模式与命令行模式之间不可互相切换
- 一般命令模式:以vi打开一个文件就直接进入一般命令模式(这是默认的模式,也简称为一般模式)。仅能删除和复制粘贴,不能做其他处理
- 编辑模式:在一般模式种按下[a、A、i、I、o、O、r、R](除了元音字母e、E、u、U)中的任何一字母后进入编辑模式,按下[Esc]即可退出编辑模式
- 命令行模式:在一般模式中按下[:、/、?]中的任何一个按钮,在底部操作栏提供退出选项
简易执行范例
使用[vi filename]进入一般命令模式
一般账号默认已经使用vim来替换vi,如果使用vi必须要使用绝对路径的方式来执行/bin/vi 才可以。vi后面一定要加文件名,不管该文件存在与否
打开空白文件
打开非空白文件
按下i 进入编辑模式,开始编辑文字
在一般模式中按下a、i、o等字符就可以进入编辑模式,键盘上除了[Esc]按键之外,其他的按键都可以视作为一般的输入按钮,可以进行任何的编辑
按下[Esc]键回到一般模式
按下[Esc]按键,
进入命令行模式,文件保存并退出vi环境
保存(wirte)并退出(quit)的命令很简单,输入[:wq]即可保存退出
当文件权限不够时可以使用[:wq!]即可,但是必须要用户的权限可以改变文件的权限才可以
按键说明
vi的三种模式只有一般命令模式可以与编辑、命令行模式切换,编辑模式与命令行模式之间并不能切换
一般命令模式(光标移动、复制粘贴、查找替换)以下命令若无[:]则均可以不需要输入[:]
移动光标的方法:
- 上下左右箭头:上下左右移动一个字符
- hjkl:对应逆时针左下右上移动一个字符
如上图下移20行即 [:20j] - [Ctrl+f]、[Page Down]:向下移动一页
- [Ctrl+b]、[Page Up]:向上移动一页
- [Ctrl+d]:向下移动半页
- [Ctrl+u]:向上移动半页
- [+]:光标移动到非空格符的下一行
- [-]:光标移动到非空格符的上一行
- [n空格键]:光标向右移动到n个字符(不需要输入:)
- [0(数字零)、Home]:移动到这一行的最前面字符处
- [$、End]:移动到这一行的最后面字符
- H:
- M:
- L:
- [G]:移动到这个文件的最后一行
- nG:n为数字,移动到这个文件的第n行
- gg:移动到这个文件的第一行,相当于[1G]
- n空格键:n为数字,光标向下移动n行
查找与替换(以下均非常常用)
- [/word]:向光标下寻找第一个名为word的字符串
- [?word]:向光标上寻找第一个名为word的字符串
- [n]:重复前一个查找的操作
- [N]:反向重复前一个查找操作(前一个向上则向下,向下则向上)
- [:n1,n2s/word1/word2/g]:n1与n2为数字,在第n1与第n2行之间寻找word1字符串,并将该字符替换为word2
- [:1,$s/word1/word2/g]:从第一行到最后一行寻找word1字符串,并将该字符串替换为word2
- [:1,$s/word1/word2/gc]:从第一行到最后一行寻找word1字符串,并将该字符串替换为word2,且在替换前显示提示字符给用户确认(comfirm)是否需要替换
删除、复制与粘贴
- [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:
- u:恢复前一个操作
- [Ctrl+r]:重做上一个操作
上述的2个快捷键一个是恢复,一个是重做一次,这两个按键式非常常用的按键,很重要 - .:.为小数点,重复前一个操作的意思。如果想要重复删除、粘贴等操作按下小数点[.]即可
编辑模式的可用按键(均常用)
- [i、I]:进入插入模式(Insert mode),i为从目前光标所在处插入,I为在目前所在行的第一个非空格符处开始插入
- [a、A]:进入插入模式,a为光标所在的下一个字符处插入,A为从光标所在行的最后一个字符处插入
- [o、O]:进入插入模式,o为光标所在的下一行处插入新的一行,O为在目标光标所在处的商议后插入新的一行
- [r、R]:进入替换模式(Replace mode),r只会替换光标所在的那一个字符;R会一直替换光标所在的文字,直到按下Esc为止
- [Esc]:退出编辑模式,回到一般命令模式中
命令行模式可用按键
- :w:将编辑的数据写入硬盘文件中(常用)
- :w!:若文件为只读时,强制写入该文件,但能否写入还取决于用户的权限
- :q:退出vi(常用)
- :q!:若曾经修改过文件,又不想保存,使用!为强制退出不保存
[!]在vi中,常常具有强制的意思 - :wq:保存后退出,若为:wq!则为强制保存后退出(常用)
- :ZZ:若文件没有修改过,则不保存退出,若文件已经被修改过则保存后退出
- :w [filename]:将编辑的数据保存成另一个文件(类似另一个新文件)
- :r [filename]:在编辑的数据中,读入另一个文件的数据,亦即将[filename]这个文件内容加到光标所在行后面
- :n1,n2 w [filename]:将n1到n2的内容保存为filename 这个文件
- :! command:暂时退出vi到命令行模式下执行 command的显示结果,例如[:! ls /home]即可在vi当中查看 /home下面以ls输出的文件信息
vim 环境的修改
- :set nu:显示行号,设置之后会在每一行的前缀显示该行的行号
- :set nonu:与set nu相反,取消行号
总结:
vi中,[数字]是很有意义的,数字通常代表重复做几次的意思,也有可能是代表去到第几个什么什么的意思
常用的命令只有一半,通常vi的命令除了上述“常用”之外,其他不用背,可把常用的做壁纸辅助记忆
案例练习
vim的缓存、恢复与打开时的警告信息
当我们使用vim编辑时,vim会在被编辑的文件目录下,再建立一个名为.filename.swp的文件。如果编辑的文件没有保存,可以用.filename.swp的恢复功能
按下[Ctrl+z]则vim会在后台执行
kill模拟将系统的vim工作删除的情况,由于vim的工作被不正常中断,导致缓存的.filename.swp文件无法借由正常流程来结束,所以缓存就不会消失,而继续保留下来
再次vi编辑时,会提示如上问题
问题一:可能有其他人或程序同时在编辑这个文件
Linux时多人多任务的环境,为避免多人同时编辑同一个文件,会有该警告
解决方法:
- 让其他人编辑的vim工作结束,然后再由自己处理
- 如果只是查看而不修改可按[o]进入只读模式[open read only]
问题二:在前一个vim环境中,因为某些未知原因导致vim中断
- 按下R将未保存的缓存文件加载进来,让自己决定是否保存,但之前的.filename.swp缓存文件还会继续存在,退出vim后还必须要手动删除缓存文件,不然还会出现警告
- 按下D会清除旧的.filename.swp缓存文件,并重新建立新的.filename.swp文件
所有可用按键
- [O]:打开文件为只读
- [E]:正常打开要编辑的文件,并不会加载缓存内容,会出现多个用户相互改变对方文件的问题
- [R]:加载缓存内容
- [D]:删除缓存内容
- [Q]:退出vim
- [A]:忽略编辑操作,类似Q
vim的额外功能
为什么要用vim?因为vim具有颜色显示的功能,并且还支持许多的程序语法,当使用vim编辑程序时,vim可帮助进行[程序排错(debug)]的功能。
上图可见:
- root的vi不为vim
- 一般用户的vi即为vim
可视区块 (Visual Block)
vi操作可以有行为单位的操作,但是可以有区块(以列为操作单位)范围
可视区块按键
- v:字符选择,会将光标经过的地方反白选择
- V:行选择,会将光标经过的行反白选择
- [Ctrl+v]:可视区块,可以用矩形的方式选择数据
- y:将反白的地方复制起来
- d:将反白的地方删除掉
- p:将刚刚复制的区块,在光标所在处粘贴
选择上述复制
在上图光标处粘贴
多文件编辑
多文件同时编辑,我们可以使用vim后面同时接好几个文件来同时打开
多文件编辑按键
- :n:编辑下一个文件
- :N:编辑上一个文件
- :files:列出目前这个vim开启的所有文件
总结:利用多文本编辑的功能,可以快速地将需要的数据复制到正确的文件内,当然,这个功能也可以利用窗口界面来达到
多窗口功能
多文本编辑的不足:
- 当文件非常大时,来回切换上下页很麻烦
- 想要同时对照看多个文件时
划分窗口并放入文件:
在命令行模式输入[:sp]。这个filename可有可无,如果想要在新窗口启动另一个文件,就加入文件名,否则仅输入:sp时,出现的则是同一个文件在两个窗口
同时多窗口打开同一个文件
多窗口情况下的按键功能
- :sp [filename]:打开一个新窗口,如果有filename,表示在新窗口创建一个新文件,否则表示两个窗口为同一个文件内容(同步显示)
- [Ctrl+w+j、Ctrl+w+向下箭头]:先按下Ctrl不放,按下w,放开按键,按下j或向下箭头,则光标可移动到下方的窗口
- [Ctrl+w+k、Ctrl+w+向上箭头]:光标移动到上方窗口
- [Ctrl+w+q]:关闭文件窗口3中方法,1.切入到相关闭的窗口输入[:q]退出,2.[:close] 关闭所在的窗口,3.[Ctrl+w+q]关闭所在窗口
vim的关键字补全功能
在语法校验方面,vim使用颜色提示
关键字补全方面也有快捷键补齐
- [Ctrl+x]->[Ctrl+n]:通过目前正在编辑的这个文件的内容文字作为关键字,予以补齐
- [Ctrl+x]->[Ctrl+f]:以当前目录内的文件名作为关键词,予以补齐
- [Ctrl+x]->[Ctrl+o]:一扩展名作为语法补充,以vim内置的关键词,予以补齐
vim环境设置与记录:~/.vimrc、~/.viminfo
vim会主动地将曾经做过的操作记录下来,方便与下次操作编辑记录,该记录操作的文件为:~/.viminfo
Linux发行版本对vim的默认环境都不太相同,但这个都可以自行设置,在一般命令模式下[:set all]来查看
vim的环境设置参数
:
总结:还可以通过配置文件来直接规定我们习惯的vim操作环境。整体vim的设置值一般是放置在/etc/vimrc 这个文件中,不过不建议修改,而是修改个人目录的~/.vimrc 这个文件(默认不存在,自行手动建立),将你所希望的设置值写入
- vimrc 内容如下
vim常用命令示意图
其他vim使用注意事项
中文编码问题
由于编码不同,中文内容可能会为一堆乱码,需考虑
- Linux系统默认支持的语系数据:与/etc/locale.conf有关
- 终端(bash)的语系:与LANG、LC_ALL这几个变量有关
- 原本文件的编码
- 打开终端的软件,例如在GNOME下面的窗口界面
DOS与Linux的换行符
在Linux下面的命令在开始执行时,判断依据是[回车],而Linux的回车为LF($)符号,DOS的换行符为CRLF(M$),多了M,如果是一个shell脚本的程序文件,可能会造成程序无法运行的状态,因为会误判程序所执行的命令内容。必须要将格式转换为Linux。
转换:
- dos2unix [-kn] file [newfile]:
- unxi2dos [-kn] file [newfile]:
语系编码转换
iconv 命令
Comments | 0 条评论