2 用命令}移动到这个段落的底部,标记为b
3 输入命令:'a,'b move来移动文本.
老版本的Vi编辑器不能很好的来处理多文件.但是 Vim在处理多文件上却显得优秀得多.我们有多种不同的方法在不同的文件之间进行文件拷贝.我们可以使用传统的Vi风格的命令,也可以使用 Vim可视化模式.我们还可以利用系统的剪切板来进行不同文件间的文本拷贝,所有的这些方法都可以很好的来工作,采用哪一种方法这就要看我们个人的喜好了.
使用传统的Vi风格命令来在不同的窗口之间进行文本的拷贝可以按照如下的方法来做:
1 编辑第一文件
2 执行命令:split second_file打开另一个窗口并开始编辑第二个文件
3 使用命令CTRL-W p回到含有原始文件的前一个窗口
4 将光标移动到要拷贝文本的第一行
5 用命令ma标记这一行
6 移动到要拷贝文本的最后一行
7 执行命令y'a来复制当前光标位置到所做标记之间的文本.
8 使用命令CTRL-W p 回到将要放置文本的这个文件.
9 将光标移到将要插入文本的地方,复制的文本将会放到这一行的前面.
10 使用命令P命令将复制的文本粘贴到文件中.
(注:p命令则是将文本放在光标所在行的后面)
用可视化模式在两个窗口中进行文本的拷贝可以按照如下的方法:
1 编辑第一个文件.
2 执行命令:split开始编辑第二个文件.
3 使用命令CTRL-W p 回到前一个包含有原始文件的窗口.
4 移动到将要复制文本的第一行.
5 执行命令V进入可视化模式.
6 移动到将要复制文本的最后一行,被选中的文本将会被高亮显示.
7 执行命令y复制选中的文本
8 使用命令CTRL-W p 回到将要放置文本的文件中.
9 移动到将要插入文本的地方,所复制的文本将会被放置在光标所在行的前面.
10 使用命令P来放置所复制的文本.
在不同的 vim程序间实现在文本的拷贝可以照如下的方法:
1 编辑第一个文件.
2 启动 Vim程序并编辑第二个文件
3 回到含有第一个文件的窗口.
4 移到要复制文本的第一行.
5 执行V命令进入可视化模式.
6 移到要复制文本的最后一行,选中的文本将会被高这显示.
7 使用命令"*y命令将文本复制到系统剪切板.
8 回到另一个窗口.
9 移动到将要放置复制文本的地方,复制的文本将会被放到当前光标的前面.
10 执行命令"*P将复制的文本放在这个文件中.
(注:这个方法似乎只在G vim中有效)
也许我们经常会编辑一些文件,其中含有一个名字的列表,这时我们希望做到的是将这个名字列表按照一定的顺序进行排列.例如我们可以按照字母的顺序进行排列,可是按照ASCII的顺序进行排列.我们可以按照下面的方法进行:
1 将光标移到要排列的内容的第一行.
2 使用命令ma进行标记.
3 将光标移到要排序的内容的底部.
4
执行命令!'asort进行排序.!命令告诉 Vim通过UNIX命令来执行.'a则是告诉 Vim这个命令作用的范围.
我们还可以按照下面的方法进行排序:
1 将光标移到要排序内容的第一行.
2 执行命令V进入可视化模式.
3 移到光标到要排序内容的底部,这时选择的文本将会被高亮显示.
4 执行命令!sort进行排序.
Vim编 辑器是一个程序员开发给程序员的编辑器.我们可以用这个编辑器在C或是C++程序文件中进行函数的定位.我们要想使用这个功能,我们首先要生成一个名为 tags的文件,在这个文件中含C或是C++程序文件中所有函数的信息.我们可以使用下面的命令来当前我们工作的目录下的所有C程序生成一个tags文 件:
$ ctags *.c
如果是对于C++文件,我们可以使用下面的命令来生成:
$ ctags *.cpp
如果我们是使用其他的扩展名,我们可以使用相应的扩展名,而不一定非要使用C或是C++的扩展名.
在我们生成这个文件以后,如果我们要利用这个文件来编辑我们的程序文件,这样 Vim就会查找相应的文件并会在函数中进行定位,例如我们要编辑的文件为write_file,我们可以使用下面的命令来开始我们的编辑工作:
$ g vim -t write_file
假如我们正在看一个名为write_file的函数,而在这个函数中调用了函数setup_data,而我们又想要知道这个函数的详细内容,这时我们可以将光标位在这个函数的开头部分,然后按下CTRL-],这样 Vim就会跳到这个函数定义的地方.哪怕是我们要查找的函数在其他的文件中, Vim也可以为我们进行精确的定位.
如果我们编辑了当前文件在没有保存的情况下使用了这个命令,那么 Vim会给出警告信息,并且会忽略这个命令.
有许多和标记函数相关的命令可以使得我们在所标记的函数中进行向前或是向后的跳转和搜索,还可以打开一个新窗口并将被调用的函数在新窗口中打开.
我们在编写程序的时候常常会在程序的开头部分写上一个注释的边框,在其中写一些表明程序用途等等的信息.在 Vim我们可以利用在~/. vimrc这个初始化文会写上一些命令来快速的完成这样的工作.例如我们可以其中加入下面的内容:
:ab #b /***************************
:ab #e <space>**************************/
这样就在 Vim当中定义的一个简写的标记,在我们要写注释时,只要输入#b<Enter>就可以了.
而我们要输出下面的注释只要输入#e<Enter>就可以了.这样的命令对于那些每天要有大量程序写的朋友们来说是不是一个巨大的帮助呢!:)
我们还可以利用 vim来读man帮助手册页,但是用这样的方法并不是太好,因为man显示的结果中一些下划线在 Vim中显示会有一些困难.为了去除这样的字符,我们可以使用标准的UNIX命令ul -i.这样就会去除那些很难阅读的控制字符.例如我们可以用下面的命令来读date的man手册页:
$ man date | ul -i | vi -
我们还要用这样的 技巧来使用 Vim:
:%s/.\b//g
这个命令是告诉 Vim移除那些退格符(\b),从而使用文件更易读.
位于文件行后面的空格符或是制表符有时是没有用,而他们的存在也使得文件看起为不是太舒服,去除这些多余的符号我们可以使用下面命令:
:%s/\s*$//
冒号是表明进入命令模式,所有的命令模式都要指明命令作用的范围,在这里我们是指整个文件(%),这个命令是使得 Vim将文件行末的空白符(\s)重复0次或是多数(*).
假如我们正在编辑一个文件,而且在这个文件中我们做了许多的改动.这是一个很重要的文件,我们不希望因为偶然的改动而造成损失,这时我们可以将这个文件进行写保护.当我们用 Vim来编辑一个有写保护的文件时我们并不会得到警告或是只有很少的警告,但是当我们想保存退出出 Vim会给出错误信息,指出这是一个写保护的文件,并且 Vim并不会退出.这时我们要怎么办呢?我们可以使用命令:w!强行保存或是使用:w otherfilename来以另一个文件名进行保存.
在UNIX或是Linux系统中我们可以使用 Vim和grep命令组合来编辑一些含有同一个给定单词的文件.这对我们编写程序的朋友们来说是有着极大的帮助,因为有时我们也许可以希望查看或是编辑含有同一个变量的文件.例如我们所有含有frame_counter的C程序文件,这时我们就可以使用下面的命令:
$ vim `grep -l 'frame_counter' *.c`
grep命令是在所有的文件中查找含有指定单词的文件,因为我们指定了-l选项,所以这个命令只是会列出含这个单词的文件而不会打印出这一行的信息.这样 Vim就会打开grep命令列出的文件进行编辑,而我们也就可以使用:n或是:rewind命令在这些文件中进行跳转.
我们还可以在 Vim内部使用:grep命令来查找我们想要的字符串,例如我们要在所有的C程序文件中查找含有error_string的字符串,我们可以使用下面的命令:
:grep error_string *.c
但是这个命令是使用外部的UNIX或是Linux命令,而且 Vim会打开第一个匹配的文件,并将光标置于第一个查找到的字符串处.
vi编辑器的学习使用(十七)
在 Vim编辑器有着相当丰富的命令和设置.有许多的命令设置可以说我们是根本就不会用到的.下面的只是简要的介绍一些这样的命令和设置的方法.
命令cscope可以检查C或是C++程序文件并产生一个含有程序中函数和变量信息的数据库.我们可以使用Cscope程序来查看这个数据库从而可以得函数定义和使用的一些信息.Cscope可以从下处得到:
http://cscope.soureforge.net
我们可以使用下面的命令来得一些详细的帮助信息:
:help cscope
Cscope一些相关的命令如下:
:cs arguments
:cscope argument
处理一些与Cscope程序相关联的活动
:cstag procedure
定位到Cscope数据库中名为procedure的函数标记处
:set csprg=program
:set cscopeprg=program
定义CScope程序名(默认为Cscope)
:set cst
:set cscopetag
:set nocst
:set nocscopetag
如果设置了cscopetag选项就可以在使用Cscope数据中使用命令(:tags,CTRL-])来浏览标记
:set csto=flag
:set cscopetagorder=flag
这个选项设置了CScope标记查询命令的查询顺序.如果是默认的0,那么会先查Cscope数据库,然后是标记;如果是1,则首先查在标记中查找.
:set csverb
:set cscopeverbose
:set nocsverb
:set nocopeverbose
如果设置了cscopeverbose选项,那么在 Vim查找Cscope数据库并且查找失败时给出错误信息,而 Vim默认的设置为nocscopeverbose
OLE系统是运行在Windows下面的程序彼此之间进行通信的方法.而 Vim编辑器可以来扮演一个OLE服务器的角色.这就意味着我们可以来编写Window程序并与 Vim通信.我们可以用下面的命令来得到更详细的帮助信息:
:help ole-interface
与Perl的接口可以使得我们在 Vim中执行perl命令,同时可以提供给Perl程序一个接口,使得他可以访问 Vim的功能.我们可以使用下面的命令来得一些更详细的帮助信息:
:help perl
Perl的一些接口命令如下:
:pe command
:perl command 执行单一的perl命令
:range perld command
:range perldo command 在几行上执行perl命令
与Perl相类似是Python.我们可以用命令:help python得到更详细的帮助信息.
Python的一些接口命令如下:
:range py statement
:range python statement 执行单一的Python命令描述
:range pyf file
:range pyfile file 执行文件中的Python程序
Sniff+的一些接口命令如下:
:sni command
:sniff command 通过与Sniff+的接口来执行命令.如果没有提供命令,则会显示出当前连接信息.
同样我们可以通过命令:help sniff来得到 Vim提供的帮助信息.
Tcl的一些接口命令:
:tc command
:tcl command 执行单一的Tcl命令
:range tcld command
:range tcldo command
在所列出的行中每行执行一次Tcl命令
:tclf file
:tclfile file 在给定的文件中执行Tcl脚本
Vim编辑器可以处理各种不同的语言.在这里列出我们一些常用字的用其他语言来编辑文件的命令.如果我们要想得到一些更详细的说明,则要查阅 Vim文档或是我们的系统文档了.
下面的是一个固定的常用的命令:
<F8> 在从左到右和从右到左两种模式间切换
:set rl
:set rightleft
:set norl
:set norightleft
通过这些选项的设置我们可以选择是从左到右的模式还是从右到左的模式
:set ari
:set allowrevins
:set noari
:set noallowrevins
通过设置这些选项我们可以通过CTRL-_来设置revins选项.这个可以使得我们选择语言的输入的是从左到右还由右至左.
:set ri
:set revins
:set nori
:set norevins
通过这些选项设置,我们可以选择在插入模式下是由左至右还是由右至左.如果设置了allowrevins选项我们可通过CTRL-_来在这几个选项间进行切换.
:set gfs=f1,f2
:set guifontset=f1,f2
定义英语使用f1字体,而另一种语言使用f2字体
这个选项只有在我们编译 Vim编辑器时允许进行字体设置并且是只在UNIX系统才可以正常的工作.
:set lmap=ch1ch2,ch1ch2
:set langmap=ch1ch2,ch1ch2
为外文本设置键盘映射
Vim编辑器对汉字的输入支持由左到右,由右到左几种模式.他还支持传统的中文和简体中文.与中文相关的命令如下:
:set fe=encodning
:set fileencoding=encoding
设置文件的编码.对于中文这个选项可以是对于传统中文的taiwan或是对于简体中文的pre.
如果我们要编辑 Vim编辑器时打开了Farsi的支持,我们就可以在用这种语言来编辑文件了.可以用-F选项在启动 Vim时进入Farsi模式:
$ vim -F file.txt
我们可以得到更详细的信息:
:help farsi
与Farsi相关的命令如下:
:set fk
:set fkmap
:set nofk
:set nofkmap
通过这些选项的设置我们可以告诉 Vim我们正在使用Farsi键盘
:set akm
:set altkeymap
:set noakm
:set noaltkeymap
通过设置这些选项我们可以告诉 vim编辑器键盘映射是Farsi还是Hebrew
CTRL-_ 在Farsi和正常模式下进行切换
<F9> 在标准的ISIP-3342编码和扩展的ISIR-3342编码之间进行切换
Hebrew是由右到左的另一种语言.采用Hebrew模式进行编辑可以使用下面的命令:
$ vim -H file.txt
:help hebrew可以使得我们得到更多的帮助信息.
与Hebrew相关的一些命令:
:set hk
:set hkmap
:set nohk
:set nohkmap
通过这些选项我们可以打开或是关闭Hebrew键盘映射
:set hkp
:set hkmappp
:set nohkp
:set nohkmapp
通过这些选项我们可以告诉 Vim编辑器我们正在使用Hebrew键盘还是标准的英语键盘(默认为nohkmapp,即标准的英语键盘)
CTRL-_ 这个命令可以使得我们在Hebrew或是正常插入状态下进行切换
:set akm
:set altkeymap
:set noakm
:set noaltkeymap
如果设置了altkeymap选项,那么与其交换的键盘映射为Farsi.如果设置了noaltkeymap选项,那么则是Hebrew键盘映射.(默认为noaltkeymap)
Vim编辑器还可以支持日文,与日文相关的一些命令如下:
:set fe=japan
:set fileencoding-japan
告诉 Vim编辑器当前文件采用日文编码.
我们可以通过命令:help hangul得到更多的韩文帮助信息.与韩文相关的命令如下:
:set fe=korea
:set fileencoding=korea
告诉 Vim编辑器当前的文本采用韩文的编码.
我们还可以使用 Vim编辑器来编辑二进制文件,相关的命令如下:
:set bin
:set binary
:set nobin
:set nobianary
如果我们设置了insertmode选项,那么 Vim默认的便为插入模式.我们可以通过命令CTRL-O切换到正常模式.相关的命令如下:
:set im
:set insertmode
:set noim
:set noinsertmode
CTRL-L 如果设置了insertmode选项,则保留这种设置
vi编辑器的学习使用(十八)
我们在 Vim编辑器的学习使用(二)曾学过一些基本的编辑命令,有了这样的一些基本的编辑命令,我们可以完成绝大多数的编辑任务.在这一次的学习中我们将会接触到更多的更深一些的东西.
Vim编辑器有着各种不同的命令可以使得我们任意的移到一个单词的开头或是结尾.但是有我们却可以通过 Vim的一些选项的内容来自定义一个单词的定义.w命令可以使得光标向前移到一个单词.而命令e也是向前移到一个单词,但是这个命令是将光标定位在一个单词的结尾处.
而命令ge则是向后移到一个单词到达前一个单词的结尾处.
那 么怎么样来定义一个单词呢?我们也许都知道单词只是一系列的字母的组合.然而在C程序中size56却会被认为是一个单词,因为在C程序中我们是通过字 母,数字和下划线来定义一个单词的.但是在LISP程序中我们可以在变量名中使用-,这时他们会认为total-size是一个单词,而在C程序中这却会 被认为是两个单词.我们如何来解决这样的冲突呢? Vim的解决办法是产生一个选项来定义哪些是一个单词中的,而哪些不是.例如下面的命令定义了属于一个单词中的字母:
:set iskeyword=specification
查看当前选项的值我们可以使用下面的命令:
:set iskeyword?
下面的是一般的值:
iskeyword=@,48-57,_,192_255
在这些值中间中用逗号来分隔的.
如果我们想要单词中的字母是专一的元音,我们可以使用下面的命令:
:set iskeyword=a,e,i,o,u
我们还可以使用横线来指定字母的范围.如果要指定所有的小写字母,我们可以用下面的命令:
:set iskeyword=a-z
对于那些不能直接指定的字符我们可以使用十进制的数字来表示.如果我们要指定小写字母和下划线为一个单词,我们可以使用下面的命令:
:set iskeyword=a-z,45
(短横线的十进制数字表示为45)
字母@指代C函数isalpha()返回值为真是的所有的字符.这个要取决于我们所使用的C编译器和我们编译 Vim所使用的操作系统)
排除某一个字符我们可以在这个字符前加上一个前缀^.例如我们可以使用下面的命令来定义一个单词,这个单词可以由除了q以外的小写字符组成,也就是说在由空格分格的字符串组成,q为一个单词,而其他的字符串的组合为一个单词:
:set iskeyword=@,^q
而字符@则是由@-@所指代.
iskeyword选项一些特殊字符如下:
a 字符a
a-z 所有由a到z的字符
45 十进制数字45(短横线-)
@ 由函数isalpha()所定义的所有字符
@-@ 字符@
^x 除了x以外的字符
^a-c 除了a以处的到c的字符,即b和c
命令iskeyword可以简记为isk
iskeyword选项可以控制哪些字符可以是一个单词而哪些不是.下列的一些相似的命令可以控制其他类型的字符:
isfname 文件名
isident 定义
isprint 打印字符
选项isfname在使用命令gf时会用到,这个命令将会编辑以光标下的单词为文件名的文件.
选项isident在使用命令[d时会用到,这个命令将会查找以光标下的单词为名称的宏定义.
选项isprint定义了哪些字符可以显示在屏幕上.但是对这个我们要小心,如果我们弄错了,屏幕就会被弄得一团糟.这个选项还可以用特定的查找命令\p,这代表可打印的字符.
也许到了现在我们已经明白了什么是单词(words).而 Vim编辑还有一些命令影响到WORDS.虽然这只是大小的不同,但是他们却代到了两种不同的事物.word是指由iskeyword选项定义的字符串,而WORD则是指没有空白符的字符.在这样的观点上,that-all是两个单词(word),但是却是一个WORD.
W命令是向前移动WORDS,而B命令是向后移动WORDS.
与WORD相关的一些命令如下:
[count]B 向后移动count个WORDS
[count]E 向前移动count个WORDS,并且将光标置于WORD的末尾.
[count]gE 向后移动count个WORDS,并且将光标置于WORD的末尾.
[count]W 向前移动count个OWRDS.
我们可以使用命令将光标移动到一个句子中第一个没有空白符的字符处.如果我们要到达一行的开始处,我们可以命令用0命令.
我们可以使用命令fx在当前行光标的后面查找字符x.如果我们要重复这个查找操作可以使用命令;.就像大多数的 Vim命令一样这个命令可以用数字来指明查找的次数.;命令是按照前一次f或是F的查找方向继续查找.如果我们要向相反的方向查找我们可以使用命令,.
命令-可以向上移动到第一个没有空白符的前一行处.我们可以指定参数来移到几行.
命令+可以向下移到到第一个没有空白符的后一行处,我们可以指定参数来移到几行.
命令_可以移动到当前行第一个没有空白符的字符处.
还有一些命令可以使得我们在屏幕的不同地方进行移动.H命令可以将光标移到屏幕的顶端.如果指定的数字参数则可以移动到从屏幕顶端算起的由数字所指定的行处.与H命令相类似是L命令,所不同的只是这个命令移动到屏幕的底端.M命令可以将光标移到屏幕的中间位置.
Vim编辑器还可以记录你曾经到过的地方,并且可以使得我们回到前一次到过的地方.例如我们在编辑一个文件的时候执行了下面的命令从而到过不同的行处:
1G 到第一行
10G 到第十行
20G 第第二十行
现在我们执行下面的命令:
:jumps
这 样我们就会看到一个我们曾到过的行数的列表.在这个列表中>指的是这个列表中的当前项.这样在我们处在命令模式下我们就可以使用命令CTRL-O跳 回一行.这样>所指的就会上移一项.而命令CTRL-I或是<TAB>可以使得我们在这个列表中向下跳转.应用这样的命令我们就可以实 现在文件中进行快速的浏览和跳转.
在通常的情况下,当光标位于一行的开头是结尾的时候 Vim是不可以移动光标的.但是我们可以通过设置whichwrap选项来控制光标是否可以越过一行的结尾并且 Vim处于哪种模式.whichwrap选项一些可能的值如下表所示:
Character Command Mode(s)
b <BS> 正常模式或是可视模式
s <Space> 正常模式或是可视模式
h h 正常模式或是可视模式
l l 正常模式或是可视模式
< 左移 正常模式或是可视模式
> 右移 正常模式或是可视模式
~ ~ 正常模式
我们可以通过命令CTRL-G来使用 Vim在 屏幕的下端显示出我们所在的位置的一些信息.然而只要我们来发问我们就可以得到一些更详细的信息.为了得到更详细的信息,我们可以在CTRL-G命令加上 一个数字参数.这个数字越大我们得到的信息就越详细.例如命令1CTRL-G会告诉我们文件的全路径.而命令2CTRL-G会同时显示缓冲区的数字标号. 而命令gCTRL-G则可以显示当前光标所在的行号,列号以及文章的字符数等一些详细的信息.
我们在前面曾讨论过,CTRL-U命令可以使得 vim编辑器向上翻滚半屏,但是我们可通过设置scroll选项来控制这个命令翻滚的行数.例如下面的命令可以使得 Vim一次翻滚10行:
:set scroll=10
我们也可以通过防变CTRL-U命令的参数来改变翻滚的行数.例如命令2CTRL-U可以使得 Vim编辑器一次向上翻滚两行,直到有命令来翻滚的大小为止.
如果我们要一次翻滚一行我们可以使用CTRL-Y命令.当然这个命令也可以在前面设置参数来控制翻滚的行数.而CTRL-B命令则是一次翻滚一屏.
与向上翻滚的命令相对是向下翻滚的命令,这样的命令有如下的一些:
CTRL-D 向下翻滚.这个数值我们可以通过scroll的值来控制.
CTRL-E 一次向下翻滚一行.
CTRL-F 一次向下翻滚一屏.
当光标到达窗口的上端或是下端的时候窗口要发生滚动.我们可以通过设置scrolljump选项来控制这个翻滚数值的大小.默认情况下为1,当然了我们也可以将其改我们希望的样子.如下面的命令将翻滚量设为5:
:set scrolljump=5
与其相类似的就是sidescroll选项,所不同是后者来控制水平的翻滚.
通常情况下,窗口的翻滚是当光标到达窗口的顶部或是底部时才发生的,我们也可以通过scrolloff选项来控制光标与顶部或是底部有多少距离时发生:
:set scrolloff=3
这个命令将其为3,当光标与顶部距离为三行时发生翻滚,且翻滚后光标与底部相距三行.
也 许我们在编辑文件的过程中有时希望将指定的一行放在屏幕顶端.当然了这样的问题我们可以使用CTRL-E或是CTRL-Y命令来一行一行的移动直支满期足 要求为止.我们还可以将光标放在指定的行上,然后输入z<Enter>.我们这一行就会出现在屏幕的顶端了.
这个命令在没有任何参数 的情况是将当前行置于屏幕的顶端,我们还可以指定参数,这样就可以将指定的行置于屏幕顶端了.例如命令8z<Enter>就是将第八行置于屏 幕顶端.这个命令不仅可以将指定的行置于顶端,还可以将光标移动到本行第一个没有空白符(non-blank)的字符处.如果我们要将光标保持在一行的某 一位置不变我们可以使用命令zt,这样在这一行的位置发生变化,光标的位置也会保持不变.
如果我们要将指定的一行放在屏幕的底部,我们可以使用命令z-或是zb.所不同的只是前者是将光标放在这一行中第一个没有空白符的字符,而后者是保持光标的位置不变.
命令zz或是z.可以将指定的行放在屏幕的中部.这两个命令的不同就是前者保持光标的位置不变,而后者是将光标置于第一个没有空白符的字符处.
D命令可以将光标所在处到这一行的结尾的文字全部删掉.我们也可以在这个命令前面加上数字做为前缀,这样在执行这个命令以后, Vim不仅会将光标到光标所在行结尾处的字符全部删除,而且会再删除这一行以下的count(数字前缀)-1行文本.
与D命令相类似的是C命令.所不同的仅是C命令在删除文本以后会进入插入模式使得我们可以接着进行文本的编辑.
s命令可以删除单个的字符并进入插入状态.如果我们在前面加上数字做为前缀,那么 Vim就会删除数字所指定的那么多的字符,然后进入插入状态.
而S命令是删除当前行然后进入插入状态.我们可以指定数字count做为前缀,这样 Vim就会删除count个行,然后进入插入状态.这个命令与C命令的不同之处只是S命令作用整个行,而C命令仅是光标所处的位置到行末.
x命令是删除当前光标下的字符,如果指定count作为参数,则是向右查找count个字符并删除,而X命令是删除当前光标前的一个字行,如果指定count作为参数,则是向左查找count个字符并删除.
在 进入插入模式时我们可以使用i或是I命令.i是在当前光标处开始插入字符,而I则是一行的开头部开始插入字符.(所谓的开头是指第一个没有空白符的字符 处).如果我们要在一行中的第一个字符处开始插入我们可以使用gI命令(不论有没有空白符).a命令是在当前光标的后开始插入,而A命令与a命令相类似, 只是他是在一行的后面开始插入状态.
Vim还可以对于文本进行简单的算术运算.命令CTRL-A可以将当前光标下的数字加1,我们还可以在前面指定参数,这样就可以指定的数字加在光标下的数字上了.如果这个数字是以0开头,那么 Vim就会认为这是一个八进制的数.例如0177在我们执行这个命令后就会变为0200.如果一个是以0x或是0X开头的 Vim就会这是一个十六进制的数,例如0x1E在我们执行这个命令后就会成为0x1F.与CTRL-A命令相类似的是CTRL-X命令.所不同的只是这个命令会使得当前光标下面的数字减1. Vim是一个精巧的编辑器,他可以很好的来处理十进制,八进制,十六进制的数字计算问题.
在默认的情况下, Vim可以识别出八进制和十六进制的数字.我们可以通过nrformats来控制 Vim所识别的数字形式.如果要使得 Vim识别出十进制和八进制的数字,我们可以使用下面的命令:
:set nrformats=""
如果我们要使 Vim只识别出八进制数,我们可使用下面的命令:
:set nrformats=octal
默认的情况下我们 Vim可以识别出十进制,八进制,十六进制数字:
:set nrformats=octal,hex
我们可以使用J命令将当前行和下一行合并为一行.在合并后 Vim会加入一空格来分隔这两行.如果我们不希望用空格来分隔,我们可以使用gJ命令.这个命令与J命令类似,只是他不会加入空格来分隔这两行.
R命令可以使得 Vim进入 替换模式.在这种模式下,我们输入的每一个字符都会 替换光标下面的字符,直到我们按<ESC>退出为止.我们还可以指定数字作为参数来指明这条命令所要执行的次数.(注:这里我做的结果是r命令可以指定参数来指明执行次数,而R命令则不成)
当我们在 替换的文本中有<Tab>键时, 替换命令就会出现问题.因为他也会将<Tab> 替换为相应的字符,这样就影响了我们文本的缩进.在这样的情况下我们可以使用gr命令来进行 替换.如果光标下的字符是Tab的一部分,那么就会跳过而 替换别的字符,这样就不会影响我们文本的缩进了.我们还可以使用gR命令进入虚 替换模式(virtual replace mode),这时我们输入的字符就会 替换屏幕空白处的一个字符.