vi(vim)使用入门

    每个系统管理员至少要学会一种命令行界面的文字处理软件,以便进行日常系统管理工作。因为无论如何,要管理好Linux系统,仍然需要纯文本[注1]的手工设置。Linux的文字处理软件非常多,但是建议使用vi这个正规的文字处理软件。这是因为vi几乎在任何一个类Unix的机器中都存在,学会它会轻松很多。GNU计划中推出了vim(vi improved)这个vi的高级版本,可用功能就更多了。vi是进行shell脚本编程与服务器设置非常重要的工具,所以一定得掌握。

    如果用户在启动vim时没有指定文件名,vim会给出简要的帮助信息。如果想要获得更详细的帮助只需要键入命令:help.如果要退出键入命令:q.用~表示的空行并不是文件中的空白行。文件中的空白行依然是文件中的一部分内容,二用~表示的空行并不在文件中。vim +n filename表示打开后光标位于第n行,默认是第1行,而vim + filename则打开后光标位于最后一行。

1、vi模式

    通常,vi分为3种模式,分别是“命令模式”、“插入模式”和“末行模式”。这三种模式的作用如下:

    命令模式:vi处理文件时,一进入该文件,就是命令模式了。在这个模式下,可以使用“上下左右”键来移动光标,可以使用“删除字符”或者“删除整行”来处理文件内容,也可以使用“复制、粘贴”来处理文件数据。此模式下输入的字符一般都不会显示出来。

    插入模式:在一般模式中可以进行删除、复制、粘贴等操作,却无法进行编辑操作。要等到按下“i、I、o、O、a、A、R”等字母之后才会进入编辑模式。注意,通常在Linux中按下上述字母时,画面的左下方会出现“INSERT”或“REPLACE”的字样,这时可输入任何字符到文件中。如果要退出编辑模式则必须按下Esc键方可。

    末行模式:在命令模式中,输入“:”就可以将光标移到最下面的那一行,在该模式下您可以搜索数据,而且读取、存盘、离开vi、显示行号等操作都是在该模式下进行的。一行命令执行完后,就自动回到了命令模式。在末行模式下按下Esc可回到命令模式。

2、命令行内容说明

移动光标的方法

h或向左方向键             光标向左移动一个字符

j或向下方向键             光标向下移动一个字符

k或向上方向键             光标向上移动一个字符

l或向右方向键             光标向右移动一个字符

[Ctrl]+[f]                屏幕“向下”移动一页,相当于[Page Down]按键(常用)

[Ctrl]+[b]                屏幕“向上”移动一页,相当于[Page Up]按键(常用)

n<space>                  n表示数字,例如20.按下数字后再按空格键,光标会向右移动这一行的n个字符。例如20<space>则光标会向后面移动20个字符距离

0                         这是数字0,移动到这一行的最前面字符处(常用)

$                         移动到这一行的最后面字符处(常用)

H                         光标移动到这个屏幕的最上方那一行

M                         光标移动到这个屏幕的中央那一行

L                          光标移动到这个屏幕的最下方那一行

G                          移动到这个文件的最后一行(常用)

nG                         n为数字,移动到这个文件的第n行。例如200G则会移动到这个文件的第200行(可配合:set nu)

gg                         移动到这个文件的第一行,相当于1G(常用)

n<Enter>                   n为数字,光标向下移动n行(常用)

搜索与替换

/word                               从光标位置开始,向下寻找一个名为word的字符串。 例如要在文件内搜索vbird这个字符串,就输入/vbird即可(常用)            

?word                               从光标位置开始,向上寻找一个名为word的字符串

: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,且在替换前显示提示符给用户确认是否需要替换(常用)

22,100                    第[22,100]行之间

5,.                      第5行开始至当前行

5,$                       第5行开始至最后行

%                         整个缓冲区

.,.+20                    从当前行开始往后的连续20行

.,.-10                    从当前行开始往前的连续10行

~                         将当前字符大小写

3~                        将当前光标向后的3个字符大小写

删除、复制与粘贴

x,X                     x为删除当前光标所在字符(相当于Del键),X为删除光标前一个字符(相当于Backspace键)(常用)

nx                       n为数字,连续向后删除n个字符。举例来说,要连续删除10个字符,则输入“10x”

dd                       删除光标所在的那一整行(常用)

ndd                      删除从光标开始的n行,例如20dd则是删除20行(常用)

d1G                      删除光标所在位置到第一行的所有数据

:3,7d                    删除第3到第7行

dG                       删除光标所在位置到最后一行的所有数据

d$                       删除光标所在位置到该行的最后一个字符

d0                       d的后面是数字,删除光标所在处,到该行的最前面一个字符

yy                       复制光标所在的那一行(常用)

nyy                      复制光标所在的向下n行,例如20yy则是复制20行(常用)

y1G                      复制光标所在行到最后一行的所有数据

yG                       复制光标所在行到最后一行的所有数据

y0                       复制光标所在的那个字符到改行行首的所有数据

y$                       复制光标所在的那个字符到该行行尾的所有数据

p,P                     p为将已复制的数据粘贴到光标的下一行,P则为贴在光标上一行。

J                        将光标所在行与下一行的数据结合成同一行

u                        复原前一个操作(常用)

.                        这就是小数点。意思是重复前一个动作,如果想重复删除、重复粘贴,按下小数点就可以(常用)

进入编辑模式

i、I                    i为“从当前光标所在处插入”,I为“在当前所在行的第一个非空格符处开始插入”(常用)

a、A                    a为“从当前光标所在的下一个字符处开始插入”,A为“从光标所在行的最后一个字符处开始插入”(常用)

o、O                    o为“在当前光标所在的下一行插入新的一行”,O为“在当前光标所在处的上一行插入新的一行”(常用)

末行模式

:w                                 将编辑的数据写入硬盘文件中(常用)

:q                                 离开vi(常用)

:x                                 关闭,保存修改

:q!                               若曾修改过文件,又不想存储,使用!为强制离开不存储文件

:wq                                存储后离开,若为:wq!则为强制存储后离开(常用)

ZZ                                  若文件没有更改,则不存储离开,若文件已经修改,则存储后离开

:w [filename]                      将编辑的数据存储为另一个文件(类似另存新文件)

:!command                         暂时离开vi到命令行模式下执行command的显示结果。

:set nu                            显示行号,设置之后,会在第一行的前缀显示该行的行号

:set nonu                          与set nu相反,为取消行号   

     如果想要进行多次移动的话,例如向下移动30行,您可以使用“30j”或“30↓”的组合键,即加上想要进行的次数(数字)后,进行操作即可。在vi中,“数字”是很有意义的,数字通常表示重复做几次的意思。也有可能表示要去哪里的意思。举例来说,要删除50行,则是用50dd。数字加在动作之前。

     vi具有“可恢复”的功能,它主要凭借临时文件来做。举例来说,当我们编辑一个文件时,假设名称为/tmp/passwd,那么在这个/tmp中就会有一个临时文件,文件名为"/tmp/.passwd.swp",这是一个隐藏文件,我们所进行的一些修改,都会暂时存在该文件中。如果在修改过程中,系统死机,那么下次再重新vi  /tmp/passwd时,系统就会告诉你,是否要恢复成修改过程中的模样?如果按下R,就可以将数据恢复到修改过程中的样子,而不是源文件。如果不删除那个临时文件,每次编辑该文件的时候都会告诉你该文件有问题。


窗口操作

    在末行模式下,通过命令vsplit可以实现窗口的垂直拆分。例如在末行模式下使用命令vsplit将当前打开的文档test.c进行垂直拆分,可以:vsplit filename, 要在两个窗口之间切换,可以执行Ctrl+W。

    在末行模式下,通过命令split可以实现窗口的水平拆分。关闭所有窗口用:qall,保存所有内容用:wall。关闭当前窗口之外的窗口,用:only。在vim中执行shell,可以:! command.按回车键后将返回vim中,如果想要将执行结果返回插入到当前编辑的文件中,在末行模式下的语法格式如下:. ! command。


3、vim附加功能

     当前大部分的版本都已采用vim替代vi的功能了。为什么要使用 vim呢?因为vim具有颜色显示功能,并且支持许多程序语法,因此当使用vim编辑程序时(不论是c语言还是shell脚本),vim可以帮助您直接进行“程序调试”。

 

块选择

     要使用块选择(Visual Block)的功能,可按下v键或者V键或者[Ctrl]+v键时,光标移动过的地方就会开始反白。

v                            字符选择,会将光标经过的地方反白选择

V                            行选择,会将光标经过的行反白选择

y                            复制反白的地方

d                            将反白的地方删除掉

 

vim环境设置

    vim的环境设置参数参数有很多,如果想知道当前设置值,可以在命令行模式时输入:“:set all”来查看,不过,设置项目实在太多了。所以以下尽列出一些平时常用的简单设置值。
:set hlsearch                        设置是否将搜索的字符串反白,如果不想反白,就用:set nohlsearch

:set nu                              设置行号。取消的话就是:set nnu

:set autoindent                      是否自动缩排。不想自动缩排就用:set noautoindent

:set showmode                        是否在左下角显示状态行说明

:set all                             显示当前所有的环境参数设置值

:set syntax (on|off)                 是否根据程序相关语法设置不同的颜色      

    总之,这些设置值很有用。但是是否每次都使用vim都要重新设置一次各个参数值呢?没有必要,我们可以通过社会自文件来直接规定习惯的vim操作环境。vim设置值一般是放在/etc/vimc文件中,不过,建议不要修改它。可以修改~/.vimc文件(默认不存在,请自行手动建立),写入所需要的设置值。举例来说:

[root@linux ~]# vi ~/.vimc

:set nu

:set autoindent

:set showmode

:syntax on

 

DOS和Linux的换行符

    在DOS使用的换行符为^M$, 我们称为CR与LF两个符号。而在Linux中,则仅有LF($)这个换行符。这个换行符对于Linux的影响很大。在执行Linux命令时,它的判断依据是“Enter”,而Linux的Enter为LF符号。不过,由于DOS的换行符是CRLF,多了一个^M的符号,在这样的情况下,如果是一个shell脚本的程序,将可能造成“程序无法执行”的状态,因为它会误判程序的命令内容。

    怎么办?很简单,将格式转换为Linux即可。要以vi进入该文件,然后一个个地删除CR吗?当然不是。我们可以通过简单的命令dos2unix。因为换行符以及DOS与Linux操作系统一些字符的定义不同,因此建议不要再Windows系统中将文件编辑好后,才上传到Linux系统,这样容易发生错误。并且如果在不同的系统之间复制一些纯文本文件时,千万要使用unix2dos或dos2unix来转换格式。也可以打开后(: set ff=unix)

注1:“不论使用什么编辑器”来打开该文件,都可以看到内容,而不是呈现乱码的文件,就是纯文本文件。由于纯文本文件在任何操作系统中都可以被使用,所以是相当方便的一种设置格式。

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值