vi命令-准备好你的手指!


VI的指令集庞大而繁杂,但是正如计算机指令系统,有精简指令系统,还有扩展指令系统。
在对待vi命令的态度上,有人力求化繁为简,有人讲究多多益善。
无论如何,想要熟练的应用到工作中,掌握一定数量的命令是必须的!


本文档定位于:通过不断的练习,能够快速、准确的查看或者修改文件。
对于我个人而言,命令并不是多多益善。比如在vim中w和W的区别,但是考虑到输入大写字母,需要按下CapsLock或者使用shift的方式,这样可能反而会影响效率。因此对于使用大写字母的地方,我个人都是使用其它方式进行代替。


根据自己的习惯和工作需求,多多练习,直到你的手指可以不假思索地运用自如!



针对vim_user_manual_603的内容,结合自己工作中实际使用情况,整理了使用较多或者可能使用较多的命令供大家练习!


环境设置:
set ignorecase - 设置忽略大小写, 关闭noignorescase 
set hlsearch - 高亮显示所有符合的匹配, 关闭nohlsearch 
set incsearch - 在键入目标字符串的过程中同时开始了搜索工作
set nowrapscan - 搜索到文件头或者文件尾时就停止,不会进行文件循环搜索
set ruler - 在vim窗口的右下角显示当前光标的行列信息
set nowrap - 不要折行,这样不会把超出当前显示窗口显示宽度的行折到下一行显示
set list - 让文件中的制表符成为可见字符
set expandtab - 制表符会以相应宽度的空格来代替
set softtabstop=4 - 设置制表符的宽度为4 ('tabstop'选项的默认值是8,如果改变这个值可能会影响其它的程序)
set background=dark - 设置背景色为暗色
set textwidth=80 - 设置一行的最多字符数为80,如果大于设置的数目vim就会自动换行
set linkbreak - 一个单词不会分开在两行中显示(一半在上一行的行尾,另一半在下一行的行首)


map - Normal模式下按键映射 unmap - 删除一个映射 


syntax enable - 语法高亮
syntax clear - 暂时关闭语法高亮
syntax off - 停用语法高亮
syntax case match - 在匹配语法元素时是大小写敏感的
syntax case ignore - 在匹配语法元素时是大小写不敏感的
syntax keyword {group} {keyword} - {group}是语法组的名字,
    使用“highlight”命令可以将一组颜色方案应用到该{group}语法组上,{keyword}参数指定了实际的关键字
    例如 syntax keyword xType int long char - 这个命令使"int" "long" "char"以同一种方式高亮显示
         syntax keyword xStatement if then else endif - 这个命令使"if" ... "endif"以另一种方式高亮显示
highlight link xType Type - 使得vim对组"xType"与"Type"相同的语法高亮
highlight link xStatement Statement - 使得vim对组"xStatement"与"Statement"相同的语法高亮


vim脚本语言的介绍:(主要用于vim初始配置文件)
let - 为一个变量赋值
unlet - 删除一个变量
 

对于有些命令,不仅在vim中使用,同样的功能也适用于linux终端,对这些命令在本文中标注为(终端适用)

 

模式之间的切换

使用i/a/o等命令从normal模式进入编辑模式

使用esc按键或者ctrl+[: 进入Normal模式

v : (小写字符)进入Visual模式
V :(大写字符)进入Visual模式(整行整行的选择文本)
Ctrl-V :进入Visual模式(矩形的文本块为对象,使用o将光标置于被选中文本的另一头)

R : 进入replace模式

 

 


命令概要:
J : 将本行和下一行合并
u : 撤销操作
Ctrl-R : 反转撤销,也就是对撤销的撤销
w : 将光标移动到下一个单词的首字符(以空格或者其它标点符号作为单词的分隔符) W :移动到下一个单词(以空格作为单词分隔符)
b : 将光标移动到前一个单词的首字符
e : 将光标移动到下一个单词的尾字符
ge : 将光标移动到前一个单词的尾字符
$ : 移动到行尾
0 : 移动到当前行的第一字符
^ : 移动到当前行的第一个非空白字符
f : 在当前行查找下一个字符
% : 跳转到匹配的"("或者")",对 方括号和花括号、尖括号或者#ifdef #else #endif同样适用

 

gd : 高亮显示当前光标处的字符串

 

gg : 到达文件的第一行

G  : 到达文件的最后一行
H : 到达当前屏幕的最上方
M : 到达当前屏幕的中间部分
L : 到达当前屏幕的最下方
zz : 将当前行置为屏幕正中央
/<Up> : 查找之前使用的搜索,可以多次使用<Up>键. 同样可以使用:和<Up>组合
/\<the\> : 匹配独立的单词“the”
* : 将光标定位于某个word上,然后按下"*"键,vim会将这个word作为目标字符进行搜索。#是*号的反向版。
ZZ : 保存文件
·· : 回到刚才光标的位置,可以用在两点之间来回跳转
dw : 删除当前光标至一下word的开头
d$ : 删除当前光标到行尾的内容(相当于D)
dG : 删除当前行至文件尾的内容
dd : 删除当前的一整行
. : 重复上一个操作命令
xp : 交换两个字符(x是删除字符,但是删除的字符会被保存起来,这样使用p命令就可以取回)
yw : 复制一个word
yy : 复制一整行
y$ : 复制当前光标至行尾
args - 查看整个列表中有哪些文件
saveas another_filename - 将当前编辑的文件另存为一个新的文件名
1,15s/string1/string2/gc - 将第一行到第15行中出现的string1替换为string2,并对每次替换都需要确认
!{command} : 如果需要只执行一个shell命令的话,可以在vim中这样使用。例如,查看当前目录的内容:!ls
g CTrl-g : 查看光标所在的字符在整个文件中的位置(g和Ctrl-g之间并没有空格,使用时也不需要在前面添加:)
gq : 将一行文本重新格式化(在Visual模式下选定要格式化的内容,然后再按下命令"gq")
(gq命令根据indent comments textwidth等多个选项进行工作)
} : 移动到一段的末尾
{ : 移动到一段的开头
\c \C : 如果只想对搜索模式的一部分应用大小写不敏感的策略,可以在前面加上一个“\c”,如果大小写敏感则可以使用"\C"
         ("\c" 和 “\C”这个两个前缀的优先级高于‘ignorecase’和‘smartcase’)



split - 将屏幕分为上下两个窗口并将光标定位在上面的窗口中
vsplit - 将屏幕拆分为左右两个窗口
new - 新开一个窗口
vnew - 在竖直方向上新开一个窗口
close - 关闭窗口
qall - 针对打开很多窗口的情况,关闭所有窗口
wall - 针对打开很多窗口的情况,保存所有窗口
wqall - 针对打开很多窗口的情况,保存并退出所有窗口
qall!- 针对打开很多窗口的情况,放弃修改强制退出所有窗口



Ctrl-F : 向文件尾部滚动一屏
Ctrl-B : 向文件头部滚动一屏
Ctrl-Z : 挂起vim的执行,使得用户回到启动vim的shell中,进行别的操作,之后使用“fg”命令回到vim
Ctrl-a : 将数字参数加一,前缀部分也可以加一个数字参数例如 3Ctrl-a
Ctrl-x : 将数字参数减一,前缀部分也可以加一个数字参数例如 3Ctrl-a



Ctrl-x Ctrl-f : 在插入模式补齐文件名,使用Ctrl-n在提供的候选文件命中进行选择
Ctrl-a : 插入上次在insert模式下录入的内容(插入模式下的效果)
Ctrl-y : 插入光标处上一行中相同位置的字符
Ctrl-e : 插入光标处下一行中相同位置的字符
Ctrl-n : 自动补齐,对于一个较长的字符串,可以先输入开头部分的几个字符,接着按下“Ctrl-n”键,vim会找到相近的匹配



Ctrl-a : 光标移动到命令行行首
Ctrl-e : 光标移动到命令行行尾
Ctrl-w : 删除命令行中光标之前的一个单词
Ctrl-u : 删除命令行中光标之前的所有内容





命令示例: ---------------------------------------
:%s/\s\+$//    命令作用-消除行尾的空格或者跳格键,这个命令并不能删除空白行,
               命令解释-从整体上来看,这是个查找替换的命令,命令的格式为:范围/word1/word2/
               %表示作用的范围是每一行,\s\+$表示的是行尾的一个或多个空白字符    




模式匹配: ---------------------------------------
/a*     匹配“a” "aa" "aaa" 等等以及“”
/\(ab\)*    匹配“ab” "abab" "ababab" 等等以及“”
/ab\+   匹配“ab” "abb" "abbb" 等等
/cellx\=    匹配“cell” "cellx" 等等 \= 表示一个可有可无的项
/ab\{,4}     匹配0,1,2,3或者4次 “a” "ab" "abb" "abbb" "abbbb"
/ab\{3,}    匹配3次以及以上 "abbb" "abbbb" 等等
/ab\{0,1}   匹配0次或者一次,相当于\=
/ab\{0,}    匹配0次或多次,相当于*
/ab\{1,}    匹配1次或多次,相当于\+
/ab\{3}     匹配3次
/ab\{-1,3}  匹配时尽可能少次数的重复,对于“abbb”使用/ab\{-1,3}匹配到的是“ab”
/{-}   匹配前面的项一次或0次 ,比如/a.\{-}b 会匹配到"axbxb"中的“axb”, /a.*b匹配到的是“axbxb”
/foo\|bar   匹配到"foo"或者“bar” 在一个模式中的“或”操作符是“\|”, 
/\(foo\|bar\)\+ 匹配到"foo" "foobar" "foofoo" "barfoobar" 等等。 要匹配多次,必须把整个字符串用"\(" 和"\)"前后括起来,
/[0-9a-f]   指定匹配的范围
/[^some_set] 避免匹配到某个或者某些特殊的字符,在[]字符集的开头用"^"



常用的一些预定义字符集-注意这些项不能用于[]内部
\d  数字,等价于    [0-9]  使用[0-9]比使用\d执行起来要慢一点,下同
\D  非数字,等价于  [^0-9]
\x  十六进制数,等价于  [0-9a-fA-F]
\X  非十六进制数,等价于  [^0-9a-fA-F]
\s  空白字符,包含空格符<Space>和制表符<Tab>
\S  非空白符,除空格符<Space>和制表符<Tab>之外
\l  小写字母,等价于[a-z] 
\L  非小写字母,等价于[^a-z]
\u  大写字母,等价于[A-Z]
\U  非大写字母,等价于[^A-Z]
\h  字母,等价于[A-Za-z]
\w  数字和字母,等价于[0-9A-Za-z]
\<, \> 用于识别整个的单词




现在准备好你的手指,我们开始练习咯:---------------------------------------

根据自己的工作环境(window下或者Linux下),建议选择一个较长的文件拷贝到某个目录进行练习, 在操作之前请备份文件(cp -a filename testing)

 

用vim打开一个练习文件(vim testing)
(使用-o选项可以让vim为每个文件打开一个窗口 vim -o one.txt two.txt three.txt)
移动到23行(:23)
将第23行和第24行合并(J)
复制当前行(yy)
到达文件的尾部(G)
将刚才复制的内容粘贴到此处(p或者P,注意看下两者的不同)
将光标移动到文件的第一行(gg)
在文件的开头部分加入#This is used for testing内容(O大写字母,#This is used for testing)
查找文件中第一次出现lamp的地方(/lamp)
将字符l替换成L(rL)
将文件第2行到第10行之间出现的“name”替换为"NAME" 对每次替换都事先确认一下(2,10s/name/NAME/gc)
进入Visual模式(v)
通过移动光标确定想要到达的位置,将选中的内容删除(>或者l,d)
将光标定位到第5列,删除后面的3个字符(,3x)
重复上一个操作看看什么效果(.)
将光标向下移动5行(5j)
查看一下光标所在的行数,列数,字符数等信息(gCtrl-g)
插入一行注释,注释内容为“you may check the file **”[**为本目录下的一个文件名开头部分]
                    (o, you may check the file Ctrl-x Ctrl-f, 使用Ctrl-n在候选文件名中选择 )
将光标向右移动3个字符或者向左移动5个字符(3l或者5h)
移动到这一行的第一个字符(0)
向右移动5个单词,到达单词的词首部分(5w)
移动到第55行的行尾(:55, $)
跳转到之前的光标位置(``,这里按两次··看看出现什么效果)
(跳转到第55行)向左移动6个单词,到达单词的词首部分(6b 这里可以多按几次6b看看出现什么效果)
移动到这一行的第一个非空白字符(^)
交换当前光标和光标右边位置的两个字符(xp)
移动到前一个单词的词首部分(b)
在当前行查找从当前光标位置出现的第3个字符'n'(3fn)
将字符'n'替换成字符'c'(rc)
撤销操作(u),
反转撤销,对上一次撤销操作的撤销(Ctrl-r)
将文件保存一下(:w 如果要保存退出的话使用ZZ命令,字母大写)
在文件中查找“Lam”,大小写敏感(/\CLam)
在文件中查找“ibts”,忽略大小写(/\cibts)
查看一下当前编辑文件的路径(:!pwd)
挂起当前的vim,查看一个当面的目录(Ctrl+z, 输入命令pwd,然后键入命令“fg”回到vim)
删除当前光标位置到行尾的内容(d$或者使用命令D)
查找文件中下一次出现state字符的地方(/state)
删除光标以及光标右边的一个字符(2x)
删除当前光标后的3个单词(d3w)
向文件尾部滚动一屏幕(Ctrl-F)
将当前行置为屏幕正中央(zz)
从当前位置查找出现的172地方,将172改成175(/172, 3Ctrl-a)
将175改成174(Ctrl-x)
将光标移动到一段的末尾(})
将文件中的lampstation08替换为lampstation12(本意是替换为lampstation12,实际命令敲入时出现错误)(输入:s/lampstaion08/lmapstation12/,
                               在按下回车之前按几次Ctrl+b和Ctrl+e了解一下如何将光标快速在命令行首和行尾进行切换,
                               将光标移动到行尾,使用Ctrl+w删除一个word或者使用Ctrl+u删除光标之前的内容,将命令改写正确
                               或者将光标移动到lmapstation12开始处,使用插入键<Insert>切换到改写模式,改写完毕后再使用使用插入键<Insert>切换回来)
整行整行的选择文本(按下V进入Visual模式,使用j或者h来整行整行的选择文本)
从当前位置查找出现单词“the”的第一个地方(/\<the\>)
查看当前编辑的文件列表中有哪些文件(:args, :previous回到前一个文件 :next去往后一个文件, :first移到第一个文件, :last移到最后一个文件)
将当年编辑的文件另存为一个其它的文件名(:saveas another_filename)
将当前屏幕拆分成两个窗口(:split或者使用:vsplit 将会在竖直方面上拆分)
在两个窗口中进行光标切换(Ctrl-w)
将当前的窗口关闭(:close也可以使用:wq!或者q!命令)
移动到第46行(46G)
将当前行删除(dd)
向右移动3个单词,到达单词的词尾部分(3e)
移动到前一个单词的词尾部分(ge)
插入一个内容为Helloworld的字符串(i, Helloworld)
插入一个新行,新行的内容为上次插入的内容(o, Ctrl-a)
插入一个新行,新行的内容为HelloEarth(o,Ctrl-y[按5次],Earth)[可以按一下Ctrl-e看看是否会复制下一行相同位置的字符]
插入一行,内容为 if ( a == (b * c) / d) print " This is what we wanted"(o, if ... wanted")
移动到当前行的第一个字符处(0)
查找第一个(出现的位置(f()
确认一下括号的书写是否跟预期的一样(将光标移动到(或者)处,按几次%看看效果)
插入一个新行,新行的内容为Helloworld(o,输入Hello,然后按几次“Ctrl-n”查看会发生什么)
查找倒数第二次使用/命令查找的那个字符串的下一个位置(/<Up><Up>)
新开一个窗口用于记录阅读当前文件的笔记(:new 或者使用:vnew命令 将会在竖直方向上新开一个窗口)
在新的窗口中输入一些内容
将新窗口中输入的内容以文件的形式保存下来(:saveas notes)
保存文件退出(wq!)


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值