vim operation

vi(vim)入门简明实例教程---总览全局 快速入门
前言
本文旨在帮助学习 vim 的新手快速掌握 vim 的基本操作。本文 整理自《 TheLinuxCommandLine 》中《 AGentleIntroductionTovi 》一章 。该书籍通俗易懂,容易上手 , 十分实用。下面保留了一部分的英文,旨在帮助更好的理解命令,从而更快的掌握命令。

注明:文章中实验在ubuntu11下进行。Vi编辑器最初由BillJoy1976年编写,大多数的Linux系统并不包含真正的vi,而是由vim(viimproved的缩写)替换了。在多数系统中vim将被链接为vi,假定我们使用的vi实质上是vim程序。

正文

1.StartingAndStoppingvi启动和退出vi

我们需要学习的第一件事就是如何启动和退出vi

启动vim只需要键入

qiaoqiao@ubuntu:~$vi

即可,启动后界面如下图所示:



要退出vi,键入

:q

即可。

如果由于某些原因(通常是编辑了文件而没有保存的情况下)无法退出时,我们可以使用

:q!

来强制退出。

2.EditingModes编辑模式

再次启动vi,这次在命令后加上一个目前不存在的文件名,如下:

qiaoqiao@ubuntu:~$vifoo.txt

启动后界面如下:




其中波浪号"~"表示该行还没有文字。这里显示了一个空文件,没有任何东西。

第二件我们需要学习的重要事情就是要知道vi是一个模式编辑器。当vi启动的时候,它就出在命令模式下。在这种模式下,任何的键入都将被解释成命令,此时我们开始键入的时候vi将会显得有点混乱。

进入插入模式

要想添加文本到文件,首先我们需要进入插入模式。这可以通过在命令模式下,键入"i"键即可。我们将会看到vi下方的提示如下:

--INSERT--0,1All

现在插入下面一段文字:

Thequcikbrownfoxjumpedoverthelazydog.

要退出插入模式并返回到命令模式,我们可以按Esc键。

保存我们的工作

要保存我们对文件的更改,我们需要在命令模式下键入一个ex命令(excommand)。我们可以先键入一个冒号,然后紧接着一个"w",如下

:w

来保存我们的工作。当保存的时候vi下方的提示如下所示:

"foo.txt"[New]1L,46Cwritten1,45All

提示:如果阅读vim的帮助文档的话,你将会看到,命令模式被称为普通模式,而ex命令将被称为命令模式。我们注意这一点。

3 MovingTheCursorAround光标定位

在命令模式下,我们可以通过键入一些移动光标的命令来移动光标。常见的操作如下表所示:

key

MovesTheCursor

lorRightArrow

Rightonecharacter.

horLeftArrow

Leftonecharacter

jorDownArrow

Downoneline.

korUpArrow

Uponeline

0(zero)

Tothebeginningofthecurrentline.

^

Tothefirstnon-whitespacecharacteronthecurrentline.

$

Totheendofthecurrentline

w

Tothebeginningofthenextwordorpunctuationcharacter

W

Tothebeginningofthenextwordorpunctuationcharacter.

b

Tothebeginningofthepreviouswordorpunctuationcharacter.

B

Tothebeginningofthepreviousword,ignoringpunctuationcharacters.

Ctrl-forPageDown

Downonepage

Ctrl-borPageUp

Uponepage

numberG

Tolinenumber.Forexample,1Gmovestothefirstlineofthefile.

G

Tothelastlineofthefile


注意很多的命令都可以以数字开头,通过添加数字我们可以让命令执行多次,比如"5j"就可以将光标向下移动5行。

4.BasicEditing基本编辑

通常的编辑包括了插入文本、删除文本、剪切和复制文本这些操作。Vi包括了这些操作同时也包含了适当的撤销操作。当在命令模式下按下"u"键的时候,我们就撤销了最后一次的更改。这在编辑时十分方便。

4.1AppendingText追加文本

Vi有很多插入的命令。我们已经用过了i命令来进行插入。

这里介绍两个新的命令,aA命令如下表所示:

Command

Appendtext

a

Appendtextafterthecurrentcursor

A

Appendtexttotheendofthecurrentline

也就是a命令是在当前光标之后插入内容,A命令在当前行末尾插入内容。

下面实例练习一下。

回到上文中的foo.txt.

首先将光标移动到第一行末尾,可以使用"$"命令,然后键入a命令,插入内容后如下:

Thequcikbrownfoxjumpedoverthelazydog.Itwascool.

这样操作显得不是很快捷,下面使用A命令来插入内容。不保存上述更改,通过"0"命令将光标定位到第一行行首,然后键入A命令,我们即可在行尾直接插入内容,我们插入如下内容:


我们看到A命令直接将光标置到行尾进行插入,十分方便。

4.2OpeningALine新增一行

我们通过使用oO命令来新增一行。命令如下表所示:

Command

Openaline

o

Openablanklinebelowthecurrentline.

O

Openablanklineabovethecurrentline

也就是使用o命令在当前行的下方插入一行,使用O命令在当前行的上方插入一行。

下面实例演示.

补充:

为了便于观察到效果,这里介绍下让vi显示行号。

在用户主目录,即你登录时的目录/home/用户名下,使用命令:

qiaoqiao@ubuntu:~$sudovim.vimrc

打开vi配置文件,然后写入内容如下:




来让vi显示行号。

打开foo.txt,将光标定位在第三行,然后键入o命令,我们看到在第三行之下插入一行,如下所示:




撤销刚才的操作,光标依然定位在第三行,使用O命令,我们看到在第三行之上插入一行如下所示:



4.3DeletingText删除文本

Vi提供了很方便的删除文本的命令,x命令删除当前光标处的字符,也可以在x命令钱加上数字来指定删除的字符数目。d命令也用来删除文本,另外,d命令总是跟着一个移动的命令来控制删除的区域。

下表是一些实例:

Command

Deletestext(cutstext)

x

Deletethecurrentcharacter.

3x

Deletethecurrentcharacterandthenexttwocharacters

dd

Deletethecurrentline.

5dd

Deletethecurrentlineandthenextfourlines.

dw

Deletefromthecurrentcursorpositiontothebeginningofthenextword.

d$

Deletefromthecurrentcursorlocationtotheendofthecurrentline.

d0

Deletefromthecurrentcursorlocationtothebeginningoftheline.

d^

Deletefromthecurrentcursorlocationtothefirstnon-whitespacecharacterintheline.

dG

Deletefromthecurrentlinetotheendofthefile.

d20G

Deletefromthecurrentlinetothetwentiethlineofthefile.

下面做一些练习。

打开foo.txt,将光标定位到第一行的"It"单词上,然后重复使用x命令删除这个句子。

按下"u"键撤销操作,这次同样将光标定位在"It"上,我们使用dw命令来删除单词"It",删除后结果如下图所示:




撤销操作,再次将光标定位到"It"上,这次使用d$命令将光标到行尾的部分全部删除,删除后结果如下图所示:



键入dG命令删除第一行到最后一行的内容,删除结果如下图所示:



4.4Cutting,CopyingAndPastingText剪切、复制和粘贴


在vi中实际上d命令在删除文本的同时会把删除的内容放到类似于windows下剪切板的缓冲区中,删除的内容可以在以后的操作中用p或者P命令进行粘贴,这类似于剪切操作。

y命令则用来复制内容(称为yank),这与d命令用来剪切内容很相同。下表是一些复制操作的例子:

Command

Copiestext

yy

Copythecurrentline

5yy

Copythecurrentlineandthenextfourlines.

yW

Copyfromthecurrentcursorpositiontothebeginningofthenextword

y$

Copyfromthecurrentcursorlocationtotheendofthecurrentline.

y0

Copyfromthecurrentcursorlocationtothebeginningoftheline

y^

Copyfromthecurrentcursorlocationtothefirstnon-whitespacecharacterintheline.

yG

Copyfromthecurrentlinetotheendofthefile.

y20G

Copyfromthecurrentlinetothetwentiethlineofthefile.

下面做一些练习。

打开foo.txt,我们将光标定位在第一行,然后使用yy命令复制第一行内容,再使用G命令将光标置于最后一行,我们使用p命令将内容粘贴在最后一行的下面。

结果如下图所示:



撤销刚才的操作,将光标再次定位到最后一行,这次使用P命令,将内容粘贴在最后一行的上面,结果如下图所示:



操作完毕后请将文件恢复到原状态。

4.5JoiningLines行的连接

Vi中对行的概念是很严格的。通常情况下你无法将光标移动到行的末尾来删除行结束符而把下一行连接起来。因此vi中提供了J命令来进行行连接。

将光标置于第三行,我们使用J命令,结果如下图所示:


4.6SearchAndReplace查找和替换

单行查找

单行查找使用f命令,f命令在一行中查找单个字符,并将光标置于下一个字符出现的位置。

例如,我们使用fa命令,在当前行中查找"a"字符。

全文查找

Vi中使用/命令来进行单词或者句子的查找。当我们键入/符号,屏幕下方就会出现/符号。接下来键入单词或者句子,并以回车键结束就开始了全文查找。我们可以使用n命令来重复查找命令,查看下一个单词或者句子出现的地方。下面做一个练习。

使用/Line命令在foo.txt中查找Line单词,键入回车后光标第一次出现在第二行处,接下来键入n时,光标移动到第三行。重复键入n,将会把光标移动到下一个出现Line的位置。

当然除了查找单词和句子外,还可以用正则表达式进行搜素,在这里不做讨论,可以后续学习。

全局查找和替换

Vi使用ex命令来在一定范围内或者整个文件中进行查找和替换。这里我们以将foo.txt中的Line替换为line为例,执行的命令是:

:%s/Line/line/g

执行结果如下图所示:



这个命令中各个字段的含义如下表所示:

Item

Meaning

:

Thecoloncharacterstartsanexcommand.

%

Specifiestherangeoflinesfortheoperation.%isashortcut
meaningfromthefirstlinetothelastline.Alternately,the
rangecouldhavebeenspecified1,5(sinceourfileisfive
lineslong),or1,$whichmeans“fromline1tothelastlinein
thefile.”Iftherangeoflinesisomitted,theoperationisonlyperformedonthecurrentline.

s

Specifiestheoperation.Inthiscase,substitution(searchand
replace).

/Line/line/

Thesearchpatternandthereplacementtext

g

Thismeans“global”inthesensethatthesearchandreplaceis
performedoneveryinstanceofthesearchstringintheline.If
omitted,onlythefirstinstanceofthesearchstringoneachline
isreplaced.


我们可以再命令的末尾加上c参数,来提供用户确认的功能。我们执行命令:

:%s/line/Line/gc

来讲line还原为Line

下图为出现的提示:




屏幕下方出现的替换确认提示符各个字段的含义如下表所示:


Key

Action

y

Performthesubstitution.

n

Skipthisinstanceofthepattern

a

Performthesubstitutiononthisandallsubsequentinstancesofthepattern

qorEsc

Quitsubstituting.

l

Performthissubstitutionandthenquit.Shortfor“last.”

Ctrl-e,Ctrl-y

Scrolldownandscrollup,respectively.Usefulforviewing
thecontextoftheproposedsubstitution.


当我们键入y将进行本次的替换,键入n将忽略本次替换并将光标置于下一个待替换的位置,而键入a将执行全部的替换并不再提醒。

4.7EditingMultipleFiles多文件编辑

一次能编辑多个文件通常是方便的。比如你要从一个文件中拷贝内容到另一个文件。

在vi通过在命令行中指定多个文件名,可以一次打开多个文件。

格式如下:

vifile1file2file3 ...

为了便于演示,我们首先再建立另外一个文件ls-output.txt,方法如下:

qiaoqiao@ubuntu:~$ls-l/usr/bin>ls-output.txt

下面同时打开两个文件如下:

qiaoqiao@ubuntu:~$vifoo.txtls-output.txt

我们将首先看到foo.txt中的内容。

多文件之间的切换

当打开多个文件后,我们使用:n:N命令来在文件之间切换,:n表示切换到下一个文件,而:N则表示切换回上一个的文件。需要注意的是vi将采取一种策略来防止我们在没有保存当前文件的情况下进行文件切换。要强制进行文件切换我们可以再命令的后面加上感叹号(!)

另外vi还提供了:buffers命令来查看当前编辑文件的列表,我们运行该命令将在屏幕下方看到:




列出了打开的文件信息。要在文件之间切换可以使用:buffer加上你想编辑的文件的号码。例如,你要编辑ls-output.txt,就可以执行:

:buffer2

命令。

打开额外的文件

添加文件到当前编辑会话也是可以的。ex命令:e紧接文件名就可以打开额外的文件。我们先关闭当前会话,重新单独打开foo.txt文件。此时要打开另外一个文件,需要键入:

:els-output.txt

我们可以使用:buffers命令来验证打开了几个文件,验证结果如下图所示:




需要注意的是,利用e命令打开的文件,不能使用:n或者:N命令来切换,而要用:buffer加上数字来切换文件。

从一个文件中拷贝内容到另外一个文件

当编辑多个文件时,我们希望能从一个文件中拷贝一些内容到我们正在编辑的文件中。在vi中可以通过复制命令即可轻松实现。

首先,我们打开上述两个文件,使用命令

:buffer1

切换到第一个文件,显示如下图所示:


然后我们在第一行使用yy命令复制第一行的内容,通过键入

:buffer2

切换到第二个文件,第二个文件显示如下:



我们将光标定位在第一行,使用p命令,粘贴内容后如下图所示:


插入一整个文件

Vi中也可以通过命令

:r加上文件名,向当前编辑的文件中插入文件名指定的文件。

下面来演示。

首先打开一个文件使用命令如下:

qiaoqiao@ubuntu:~$vils-output.txt

打开文件如下图所示:



在打开的文件中将光标定位在第三行,然后使用命令:

:rfoo.txt

结果如下图所示:



4.8SavingOurWork保存工作

就像vi中的其他操作一样,保存文件的操作也有多种方式。已经讲过了:w命令,还有一些其他命令,也很有用。在命令模式下,键入ZZ可以保存当前编辑的文件并退出vi。同样地使用:wq命令将组合了:w:q命令,既能保存文件又能退出系统。

另外:w可以指定文件名,这样可以实现另存为功能。例如将foo.txt另存为foo1.txt需要键入

:wfoo1.txt

需要注意的是,在当前编辑文件另存为另一个文件后,你编辑的文件文件名不变。也就是你继续编辑的是foo.txt,而不是foo1.txt文件。

总结

Vi的入门命令学习起来也很简单,下面总结上面的各个命令列在下面供参考学习。

key

MovesTheCursor

lorRightArrow

Rightonecharacter.

horLeftArrow

Leftonecharacter

jorDownArrow

Downoneline.

korUpArrow

Uponeline

0(zero)

Tothebeginningofthecurrentline.

^

Tothefirstnon-whitespacecharacteronthecurrentline.

$

Totheendofthecurrentline

w

Tothebeginningofthenextwordorpunctuationcharacter

W

Tothebeginningofthenextwordorpunctuationcharacter.

b

Tothebeginningofthepreviouswordorpunctuationcharacter.

B

Tothebeginningofthepreviousword,ignoringpunctuationcharacters.

Ctrl-forPageDown

Downonepage

Ctrl-borPageUp

Uponepage

numberG

Tolinenumber.Forexample,1Gmovestothefirstlineofthefile.

G

Tothelastlineofthefile

Command

Appendtext

a

Appendtextafterthecurrentcursor

A

Appendtexttotheendofthecurrentline

Command

Openaline

o

Openablanklinebelowthecurrentline.

O

Openablanklineabovethecurrentline

Command

Deletestext(cutstext)

x

Deletethecurrentcharacter.

3x

Deletethecurrentcharacterandthenexttwocharacters

dd

Deletethecurrentline.

5dd

Deletethecurrentlineandthenextfourlines.

dw

Deletefromthecurrentcursorpositiontothebeginningofthenextword.

d$

Deletefromthecurrentcursorlocationtotheendofthecurrentline.

d0

Deletefromthecurrentcursorlocationtothebeginningoftheline.

d^

Deletefromthecurrentcursorlocationtothefirstnon-whitespacecharacterintheline.

dG

Deletefromthecurrentlinetotheendofthefile.

d20G

Deletefromthecurrentlinetothetwentiethlineofthefile.

Command

Copiestext

yy

Copythecurrentline

5yy

Copythecurrentlineandthenextfourlines.

yW

Copyfromthecurrentcursorpositiontothebeginningofthenextword

y$

Copyfromthecurrentcursorlocationtotheendofthecurrentline.

y0

Copyfromthecurrentcursorlocationtothebeginningoftheline

y^

Copyfromthecurrentcursorlocationtothefirstnon-whitespacecharacterintheline.

yG

Copyfromthecurrentlinetotheendofthefile.

y20G

Copyfromthecurrentlinetothetwentiethlineofthefile.

Command

Pastetext

p

Pastethecontentsofthebufferafterthecursor

P

Pastethecontentsbeforethecursor

Command

Joinlines

J

Joinonelinewiththeonebelowit

Key

EditingMultipleFiles

:n

Switchfromonefiletothenext

:N

Movebacktothepreviousfile

:buffers

Viewalistoffilesbeingedited

:buffernumber

Switchtothespecifiedfilethenumberpointto

:efilename

Addfilestoourcurrenteditingsession

:rfilename

Insertsthespecifiedfiletothecurrentfile

要更快的掌握这些命令需要多加练习,要完全掌握vi的使用,需要学习更多的内容,从事更多的实践

在UBUNTU中vim的配置文件存放在/etc/vim目录中,配置文件名为vimrc
在Fedora中vim的配置文件存放在/etc目录中,配置文件名为vimrc
在Red Hat Linux 中vim的配置文件存放在/etc目录中,配置文件名为vimrc
  1. set nocompatible "去掉有关vi一致性模式,避免以前版本的bug和局限
  2. set nu!"显示行号
  3. setguifont=Luxi/Mono/9 "设置字体,字体名称和字号
  4. filetype on "检测文件的类型
  5. set history=1000 "记录历史的行数
  6. set background=dark "背景使用黑色
  7. syntax on "语法高亮度显示
  8. set autoindent"vim使用自动对齐,也就是把当前行的对齐格式应用到下一行(自动缩进)
  9. set cindent "(cindent是特别针对 C语言语法自动缩进)
  10. set smartindent "依据上面的对齐格式,智能的选择对齐方式,对于类似C语言编写上有用
  11. set tabstop=4 "设置tab键为4个空格,
  12. set shiftwidth=4 "设置当行之间交错时使用4个空格
  13. setai! "设置自动缩进
  14. set showmatch "设置匹配模式,类似当输入一个左括号时会匹配相应的右括号
  15. set guioptions-=T "去除vim的GUI版本中得toolbar
  16. set vb t_vb= "当vim进行编辑时,如果命令错误,会发出警报,该设置去掉警报
  17. set ruler "在编辑过程中,在右下角显示光标位置的状态行
  18. set nohls "默认情况下,寻找匹配是高亮度显示,该设置关闭高亮显示
  19. set incsearch "在程序中查询一单词,自动匹配单词的位置;如查询desk单词,当输到/d时,会自动找到第一个d开头的单词,当输入到/de时,会自动找到第一个以ds开头的单词,以此类推,进行查找;当找到要匹配的单词时,别忘记回车
  20. setbackspace=2"设置退格键可用
  21. 修改一个文件后,自动进行备份,备份的文件名为原文件名加“~”后缀
  • if has("vms")
  • set nobackup
  • else
  • set backup
  • endif

如果设置完成后,发现功能没有起作用,检查一下系统下是否安装了vim-enhanced包,查询命令为:

$rpm -q vim-enhanced
注意:如果设置好以上设置后,VIM没有作出相应的动作,那么请你把你的VIM升级到最新版,一般只要在终端输入以下命令即可:sudo apt-get install vim



在UBUNTU中vim的配置文件存放在/etc/vim目录中,配置文件名为vimrc
在Fedora中vim的配置文件存放在/etc目录中,配置文件名为vimrc
在Red Hat Linux 中vim的配置文件存放在/etc目录中,配置文件名为vimrc
  1. set nocompatible "去掉有关vi一致性模式,避免以前版本的bug和局限
  2. set nu!"显示行号
  3. setguifont=Luxi/Mono/9 "设置字体,字体名称和字号
  4. filetype on "检测文件的类型
  5. set history=1000 "记录历史的行数
  6. set background=dark "背景使用黑色
  7. syntax on "语法高亮度显示
  8. set autoindent"vim使用自动对齐,也就是把当前行的对齐格式应用到下一行(自动缩进)
  9. set cindent "(cindent是特别针对 C语言语法自动缩进)
  10. set smartindent "依据上面的对齐格式,智能的选择对齐方式,对于类似C语言编写上有用
  11. set tabstop=4 "设置tab键为4个空格,
  12. set shiftwidth=4 "设置当行之间交错时使用4个空格
  13. setai! "设置自动缩进
  14. set showmatch "设置匹配模式,类似当输入一个左括号时会匹配相应的右括号
  15. set guioptions-=T "去除vim的GUI版本中得toolbar
  16. set vb t_vb= "当vim进行编辑时,如果命令错误,会发出警报,该设置去掉警报
  17. set ruler "在编辑过程中,在右下角显示光标位置的状态行
  18. set nohls "默认情况下,寻找匹配是高亮度显示,该设置关闭高亮显示
  19. set incsearch "在程序中查询一单词,自动匹配单词的位置;如查询desk单词,当输到/d时,会自动找到第一个d开头的单词,当输入到/de时,会自动找到第一个以ds开头的单词,以此类推,进行查找;当找到要匹配的单词时,别忘记回车
  20. setbackspace=2"设置退格键可用
  21. 修改一个文件后,自动进行备份,备份的文件名为原文件名加“~”后缀
  • if has("vms")
  • set nobackup
  • else
  • set backup
  • endif

如果设置完成后,发现功能没有起作用,检查一下系统下是否安装了vim-enhanced包,查询命令为:

$rpm -q vim-enhanced
注意:如果设置好以上设置后,VIM没有作出相应的动作,那么请你把你的VIM升级到最新版,一般只要在终端输入以下命令即可:sudo apt-get install vim

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值