码迷,mamicode.com
首页 > 系统相关 > 详细

vim 常用操作总结

时间:2015-09-10 17:49:45      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:vim 常用操作总结

在命令行:h  命令和字符  查看该命令和字符的意思

一、移动

在普通模式下

1.1、移动和插入

h    左移一列

  

l      右移一列

j      下移一列


k     上移一列


G     最后一行行首;

gg   第一行行首;

0      行首

^      行首

$      行尾

w     正向移动到下一个单词的开头;(每次跳过一个空格)

b     反向移动到当前单词/上一个单词的开头;(每次跳过一个空格找到一条字符串)

e     正向移动到当前单词/下一个单词的结尾;(单词结尾的前一个字符)

ge   反向移动到上一单词的结尾

ea   正向在当前单词或下一个单词结尾后插入

以上w、b、ge、加a 后移动后插入

i      当前插入

C     c$      删除光标后本行内容并插入

c^    删除光标到行首并插入;

s      cl      删除光标后的一个字符并插入

S     ^c     相当于dd 删除当前行

I      ^I      插入当前行首

A    $a      插入当前行尾

o    A<CR>  插入空白行

1.2在命令行模式下

:1     即是命令模式输入行号,就跳转到相应的行;

:$ 跳到文件最后;

:{start},{end}  例如:   :2,5p  打印第2行到第五行的内容 。-

 

二、查找

在普通模式下

1>f字符      行内查找下一处指定字符(单个字符)出现的位置,如果找到了,就直接把光标移动到那里。

;命令会重复查找上次f 命令所查找的字符

F字符     行内查找上一次制定的字符

2>先把光标放到字符串上,*  后查找到,n 会查找下一处

在命令行下

:/字符    ,查找到后,n 会查找下一处

:/\<\>   ,<8088> <ok> ,可以限定查找的字符或者数字,<>用于匹配字符的边界

可以开启very magic 模式:/\v<8088>  此处的v 是小写的!

三、替换

在命令行模式下

:%s/content/copy/g        用copy  全局替换content

在普通模式下

四、撤销

u 键会触发撤销命令,它会撤销最新的修改。一次修改可以是改变文档内文本的任意操作,其中包括

在普通模式、可视模式以及命令行模式中所触发的命令

五、删除

在普通模式下

db      光标在单词的上,可以反向删除单词光标前的字符

例如:the end is nig|ht

  db

结果:the end is ht

dw      正向删除字符串光标后的字符,配合b 命令用于删除整个单词

例如:the end is nig|ht

b        the  end is |night

dw     the  end is |

daw    删除整个单词,首先把光标放到你要删除的单词那里

例如: the end is ni|ght

daw    the end i|s

d2w d3w  正向删除2个、3个单词

六、修改用的vim 的操作符命令

6.1vim 的强大很大程度上是源自操作符与动作命令相结合。双剑合璧天下无敌。

操作符+动作命令=具体操作

dl    正向删除一个字符

c      修改

d     删除

y     复制到寄存器(复制光标所在行)

p     粘贴复制的内容;

g~   反转大小写;

gU   转换为大写;


gu   转换为小写;

>     增加缩进

<     减少缩进

=    自动缩进

在命令行模式下!    使用外部命令,例如系统命令和shell 脚本

\\{motion}     切换制定行的注释状态  \\G  会把当前行到文件的结尾都注释掉;\\\则注释掉当前行。

\\ap 将切换当前段落的注释状态;\\u 

6.2在插入模式:ctrl+u    在光标当前行删除到行首,

Ctrl+w  删除前一个单词

ctrl+h   删除前一个字符

ctrl+u  从光标删除到行首

6.3在明令行模式下删除和复制制定的行

:[range] delete [x]     删除制定范围内的行,[到寄存器x中]  例如在命令行 :2,5 delete  删除2到5行】

:[range] yank [x]       复制制定范围的行       [到寄存器x 中]

:[line]put [x]  在指定行后粘贴寄存器x 中的内容

:[range] copy [line]  将指定范围内的行拷贝到line 所指定的行之下;

:[range] move [line]  将指定范围内的行移动到line 所指定的行之下;

:[range] join 链接指定的行

:[range] normal {commands} 把指定范围内的每一行执行普通模式命令{commands}

:[range]substitute/{partern}/{string}/[flags]   把指定范围出现的{partern}的地方替换为{string}

:[range]global/{partern}/[cmd]   对指定范围匹配{pattern} 的所在行。在其上执行Ex 命令{cmd}                      

:[range] 中:.,5  当前行到第五行。 :.,$ 从当前行 到文件结尾的范围

:%p ,它代表当前文件中的所有行

:%s/practical/PTF/    就是把文件中每行内的一个“practical”替换为PTF,

:%s/practical/PTF/g   文中所有的 “practical”替换为PTF,

:{start},{end} 中  :/<html>/,/<\/html>/p   2个html 中之前,

:/<html>/+1,/<\/html>/-1p   html 标签之间

在命令行模式命令复制和移动行

:copy 命令(及其简写形式 :t)我们可以把范围的行从文档复制到指定的位置

:move 命令(及其简写形式:m)我们可以把范围的行从文档移动到指定的位置

:‘< 高亮选区的起始行

:‘>高亮选区的结束行

高亮区的设定和选择在普通模式下Vjj 向下选,Vkk 向上选

在指定范围上执行普通模式命令,可以在normal  后在普通模式下一系列命令

:normal

例如:在指定行尾添加符号

:2,5normal A;    在2到5每行后添加分号,默认是行尾;

在指定行首插入

:2,5 normal ^i# 在2-5 每行行首插入#

重复上次的Ex 命令@:在普通模式下

自动补全ex 命令

:col  ctrl+d 

colder       colorscheme                                  

6.34在插入模式下

ctrl+r后=,输入计算数字和计算符号,会在刚才插入的位置插入计算的结果

用字符编码插入非常用字符

ctrl+v{code} 其中的code 是字符或数字编码后的编码表示

注意:在普通模式下光标放在某个字符上  ga (g+a) 会出相应的编码

7 管理多个文件

7.1 在命令行中方便的使用shell 命令。

vim 文件

:shell  回车

进入一个# 系统命令行

当输入exit 返回vim 

:!{cmd}  在shell 中执行{cmd}

例如:!ls -al /usr/local/   

:read !{cmd}     在shell 中执行{cmd},并把其标准输出插入到光标下方,就是把shell 执行后的结果输出插入

:[range]write !{cmd}     在shell 中 执行{cmd },即使把range 内容放到cmd 后作为条件执行

:[range]!{filter}  比如grep  效果,比如:98,101 !grep tomcat   会把不含有tomcat  的行删除。

7.2用精准的文本对象选择选区

暂时显示/取消行号:

使用Vim打开文件后,在Normal模式下输入

:set number(或 :set nu)显示行号

:set nonumber (或 :set nonu)取消行号

在可视模式下

var tpl =[

 ‘<a href="{url}">{title}</a>‘

]

当使用可视模式,选区的一端固定在一个特定字符上,而另一端可以自由移动。vim 的文本对象有两个字符组成,第一个字符永远

是i 或是a.

i 开头的文本对象会选择分割符内部的文本,而以a 开头的文本对象则会选择包括分割符在内的整个文本

vi} 或者i{

其中在可是模式下 at   一对xml/html 标签和内容

it  标签内部xml/html  标签

需要先将光标放到标签相关位置,才能生效。 

用文本对象 执行操作在普通模式下

{start}

ci"#  :  先删除“”之间的内容然后再插入#

cit click here     先删除xml 标签中间的内容,并插入随后的字符串;

范围文本对象 可以和其他命令配合使用

iw        当前单词

aw       当前单词及一个空格

iW       当前字符串

aW      当前字符串及一个空格

is         当前句子

as        当前句子及一个空格

ip        当前段落

ap       当前段落及一个空行

a)        一对圆括号

i)         圆括号的内部     其他标点符号和这2个雷同

it         xml/html 之间的文本内容;

at        xml/html  含标签以及标签之间的内容

当使用可视模式,选区的一端固定在一个特定字符上,而另一端可以自由移动。vim 的文本对象有两个字符组成,第一个字符永远

是i 或是a.

i 开头的文本对象会选择分割符内部的文本,而以a 开头的文本对象则会选择包括分割符在内的整个文本

vi} 或者i{

其中在可是模式下 at   一对xml/html 标签和内容

it  标签内部xml/html  标签

需要先将光标放到标签相关位置,才能生效。 


8 和正则表达式的结合

8.1 区分大小的查找

:/\c  dean   忽略大小写

:/\C  DEAN  按大小写查找

8.2按照正则表达式

:/\v  语法模式语法和perl 近似perl 的语法

:/\V  大V 的模式按照原义查找文本。例如:/a.k.a   比如backward   也会显示 可以用转义的方法消除 :/a\.k\.a 

这里就可以用:/\Va.k.a   就会直接搜a.k.a 字符本身,对/ 不起作用

\_s  会匹配

:/\zs  Matches at any position, and sets the start of the match there: The  

        next char is the first char of the whole match. |/zero-width|

        Example:

                /^\s*\zsif

        matches an "if" at the start of a line, ignoring white space.

        Can be used multiple times, the last one encountered in a matching

        branch is used.  Example:

                /\(.\{-}\zsFab\)\{3}

        Finds the third occurrence of "Fab".  开始的边界

:/\ze Matches at any position, and sets the end of the match there: The

        previous char is the last char of the whole match. |/zero-width|

        Can be used multiple times, the last one encountered in a matching

        branch is used.

        Example: "end\ze\(if\|for\)" matches the "end" in "endif" and

        "endfor".  以什么符号结尾

:/\v"[^"]+"      Match "quoted words"----not quote marks.  

"[^"]该模式使用2个引号作为起始与结尾的标记

:/\v"\zs[^"]+\ze"   Match "quoted words"----not quote marks.   引号本身被排除于匹配之外,只剩下引用的内容

8.3 统计当前模式的匹配个数

:%s///gn     统计出匹配好的,不做替换,就是不在文本上做真的替换操作


本文出自 “好学力行” 博客,请务必保留此出处http://eagleheart.blog.51cto.com/775380/1693338

vim 常用操作总结

标签:vim 常用操作总结

原文地址:http://eagleheart.blog.51cto.com/775380/1693338

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!