Vim学习笔记

来源:互联网 发布:淘宝上如何搜电视棒 编辑:程序博客网 时间:2024/06/03 11:48
vim这东西需要经常练习才是更道理,今天挂在博客上不断的更新学习:

一、光标移动

 2012/1/12
光标(游标)的移动:
左:h
右:l
上:k
下:j

行首:
(1)数字0(非字母o),相当于home键;
(2)shift+^,移动行首第一个非空白字符。

行尾:
(1)shift+$,移动到行尾

移到文档尾
(1)G, //注意是大写的

移到文档头:
(1)gg,  //是小写的

滚屏(一屏):
(1)control+b,  向下(文件尾方向)滚屏,往前翻页。
(2)control+f,   向上(文件开始方向)滚屏,往后翻页

滚屏(半屏):
(1)control+u,向下滚半屏,向前翻页
(2)control+d,向上滚动半屏,向后翻页

滚屏(一行)
(1)control+e,向上滚动一行
(2)control+y,向下滚动一行。(在windows下可能得定义功能,我没有测试gvim)

2012/1/17
在单词间的移动:
(1)w 移到下一个单词的字首(指的是英文单词)
(2)W 同上,但忽略一些标点符号。
(3)e 移到下一个单词的字尾,(光标不在当前单词的字尾,则移到当前单词的字尾)
(4)E 同上,但会忽略一些标点符号。
(5)b 移至前一个单词的字首,(光标不在当前单词的字首,则移到当前单词的字首)
(6)B 同上,但会忽略一些标点符号。

光标在屏幕范围内的快速移动
(1)H 移到屏幕顶第一个非空白字元
(2)M 移到屏幕中间第一个非空白字元
(3)L 移到屏幕底第一个非空白字元。
注意:这和contrl+f 或control+b不一样(即翻页键),这只是光标在移动,文本并没有移动。

移到指定的行及本行第n个字母:
(1):n   移到第n行,可以:set number打开行号测试。
(2)n|   移到第n个字符,"|"字符需要按shift键,n是从本行头算起的。

2012/1/27
光标在句子及段落中的快速移动:
(1)       ) 移到下一个句首。
(2)     (   移到上一个句首。
(3)       }   移到下一个段落首。
(4)      {    移到上一个段落首。
要求:
(1)句子分隔以. ! ?为分隔,如果没有则以空行算,在测试中发现.!?后面必须有一个空格。
(2)段落以空白行为分隔。所以段落之间要有一个或多个空行。

光标在{},[],()括号上进行匹配移动
(1)%  如光标在{上,则按%移到匹配的}上面,对于写程序很受用。


二、基本编辑指令

进入插入模式(这里的输入文字,插入文字,都表示进入插入模式,可以输入文字了)
(1)i     在光标所在字元前开始输入文字。就是在光标前面开始插入文字。
(2)a    在光标所在字元后开始输入文字。就是在光标后面开始插入文字。
(3)o    这是字母o,不是数字0,在光标所在行插入一个新行来输入文字。
(4)I     这个是大写的i,在行首开始插入文字,行首指的是第一个非空白字元。
(5)A    大字字母a,在行尾插入文字。
(6)O    大写的字母o,非数字0,在光标所在行的上面插入一个新行,并开始输入文字。

连接文本
(1)J     将下一行接到本行。两行之间变成一行,但之间会留下一个空白。注意 这个命令并没有马上进入插入模式。

2012/1/28
删除指令:
(1)x 删除光标所在处字元。也可以用del键,vim光标是反白显示当前字符,即在字符上,而不是两个字符之间。
(2)X 删除光标之前字元。不可以用backspace键,那样只是光标在前移。
(3)dd 删除一行(delete line)
(4)dw 删除一个字(delete word),就是一个单词,不适合中文(我在ubuntu 11.10的控制上测试,只删除光标到字尾的部分,而不是整个单词)
(5)dG  从当前行删除到行尾。
(6)dgg  从当前行删除到行首,或d1G
(7)D  这是大写的D,从光标位置删除到行尾(包换光标所在的字符),或d$。
(8)d0  这是 数字0而不是字母o,从光标位置的前一个字符删除到行首,或d^。
注:^表示行首  $表示行尾

2012/2/9
替换
(1)r  替换光标所在位置的字符,按一下r系统等待输入替换字符,之后回到命令状态。(替换一次)
(2)R  替换状态(和windows文本编辑器重写状态一样),直到按esc键退回命令状态。
(3)cc 或大写S: 取代事先内容。(先删除本行,之后在当前行进入插入状态)
(4)cw 替换一个字。(删除这个字,并进入插入状态),不适合中文。
(5)c$ 或大写C: 替换到行尾。(从光标位置删除到行尾,并进入插入模式)
(6)c^ 或c0:  替换到行首。(从光标前一个字符删除到和行首,并进入插入模式)
(7)s 替换一个字符,与r不同。(删除光标当前位置字符,并进入插入模式)
(8)u 撤消。vim不限次数,传统的vi只撤消一次。
(9)U 在光标没有离开本行,撤消本行所有编辑。
(10)control +r 就是redo,对撤消进行撤消。

2012/2/10
重排
(1)>> 整行向右移一个shiftwidth(预设为8个字元)
(2)<< 整行向左移一个shiftwidth(同上)
:set shiftwidth?  可以查看出shiftwidth的宽度值; :set shiftwidth=4设置宽度为4
(3):center  (ce)本行文字居中对齐 
(4):left    (le)本行文字左对齐
(5):right   (ri)本行文字右对齐

复制
(1)yy    或大写一个Y,复制光标所在的整行。 2yy表示复制两行,即前面可以用数字表示要复制的行数。
(2)y^    从光标前一个字符位置,复制到行首。
(3)y$    从光标位置复制到行尾。
(4)yw    从光标位置复制一个字,如果光标在字的中间,只后半个字。
(5)y2w   复制两个字,功能同上。
(6)yG    复制到行尾
(7)y1G   复制到行首
(8)p     在光标下行粘贴
(9)P     在光标上行粘贴
注:整行的复制可以在上一行或下一行粘贴,但复制的不是整行,则在光标后粘贴。

缓冲区复制
(1)"ayy  将本行文本复制到a缓冲区, a,b,c,d等多个缓冲区随意选一个,如果是小写的则复制时覆盖缓冲区,如果是大写的追加到缓冲区。
(2)"ap   将a缓冲区的内容贴上。
(3)5"ayy 将5行的内容复制到a缓冲区
(4)5"Ayy 将5行的内容复制并追加到a缓冲区
如果有多个缓冲区,可以按:reg(:registers)进行查看,在测试中我发现:
:reg a  //查看a缓冲区的内容。
:reg 1  //查看1缓冲区的内容。
:reg  //显示全部缓冲区的内容。
如:
""   xxxxxxxxxxxxxxxxxxxxx^J   //当前默认缓冲区的内容,按p键就可以粘贴。
"0   public class Test^J       //0号缓冲区的内容,按"0p就可以粘贴出来
"1   xxxxxxxxxxxxxxxxxxxxx^J
"2   public class Test^J
"3   ^I^Icatch(IOException e)^J
"a   xxxxxxxxxxxxxxxxxxxxx^J^I^I^Ifs = new FileReader(args[0]);^J  //a缓冲区的内容
"b   yyyyyyyyyyyyyyyyyyyyy^J
".   i<80>kbyyyyyyyyyyyyyyyyyyyyy
":   reg ""
"%   Test.java  //当前编辑的文档

重复命令动作:
(1).  重复上一次的命令动作。如 dd删除一行,则按.就表示dd了。

查找:
(1) /content   向下查找content的内容,比如查找args,则:/args回车即可。 
(2) ?content   向上查找content的内容。
(3)n           继承查找。
(4)N           反向继承查找。

方便的查找
(1)*   寻找光标所在位置的word(完全符合),向下查找.
(2)#   寻找光标所在位置的word(完全符合),向上查找。
(3)g*  同*但部分匹配即可。
(4)g#  同#但部分匹配即可。
n,N仍然通用。

查找和替换
(1)[range]s/pattern/string/[c,e,g,i]
  • range指的是范围,1,7表示第一行至第7行;1,$指的是第一行到最后一行,也就是整篇文章,也可以用%代表。注意:%表示整篇文章。
  • pattern  就是要被替换掉的字符串,可以用regexp(正则)来表示。
  • string   就是将pattern由String来取代(替换)
  • c  confirm,每次替换前会询问。
  • e  不显示error
  • g  global  不询问,整行替换,否则只替换整行的第一个匹配的,如:cccc :5s/c/#/只替换第一个c
  • i  ignore  不分大小写
如::%s/Hello/Bye/gi 
这样整个文章的Hello全被替换成Bye了。


多文档编辑
(1)打开多个文档
vim file1 file2 file3 ....
(2)多个文档之间的切换
:n   下一个文档
:2n  下二个文档
:N   上一个文档
这种方法只能用于argument list的情况。

(3)打开文档
:e filename   
在vim打开的状态下打开一个新文件(filename),如果是在当前目录,可以按tab键进行文件名补齐。

(4)编辑前一个文档
:e# 或control+^
#代表前一个文档,%代表当前文档。

(5)列出当前buffer中所有的档案
:files   
:buffers
:ls
这三个都可以列出buffer中的档案。

(6)切换到指定的档案
:b 档案名或编号
可以先通过:ls列出档案名或编号,之后通过b进行切换

(7)关闭当前文件
:bd 或bdelete  您可以

(8)显示档案名,是否被改过,行数等
:f 或control+g

(9)修改档案名
:f newName  
修改完,需要w写盘一下才可以保存到磁盘上,他会在磁盘上新建立一个文件。

(10)在光标处插入另一个文件的内容
:r fileName

(11)在第n行插入另一个文件的内容
:n r 文件名

离开
(1)退出vim
:q
如果存档了则退出,如果没有存档则警示先保存再退出。
(2)强制退出
:q!
强迫离开,并不保存文档。
(3)保存并离开
:wq
:x
:ZZ
这三个都可以,随意用哪一个。
(4)保存文件
:w
(5)文件存另为
:w filename


文档加密
(1)在打开文件时加密方法
vim -x filename
根据提示输入两次密码即可。
(2)在vim里加密
:X
根据提示输入两次密码即可。

2012/2/15
标示(v-mode)指令
(1)v 小写的,按v后移动光标就可以反色显示。(移动光标的大部分指令在这里也可以用)对于选中的不满意可以按v结束v-mode。
(2)V 大写的,选中一行。此时再上下移动光标,则全是整行选中的。
(3)Control+v  块标示,可标示出矩形块(纵向)
         注:由于windows下control+v已经被系统占用,所以用control+q来代替,但这个我还没有测试。
                v进入v-mode模式时,在vim软件下面有提示的--visual--,如果是块模式 -- visual block --
                结束v-mode:ESC键,或统一controlo+c(一会去windows测试一下)
(4)d 删除块的内容
(5)y 复制块的内容,当然也可以复制到指定上缓冲区,如:"by,用"bp粘贴即可。
补充二点:
1、我的理解错误,之前的yy复制一行,之后p就粘在下一行了,今天用v-mode模式复制一个单词,直接p粘在了光标后面(这很符合逻辑)我还以后粘在下一行呢(很强大啊)。给自己更正一下思维惯性错误。
2、在复制的时候,控制台下的光标显示的是_,不是块,所以v-mode反显的是光标前一个字符,那么在复制时以为是你看到的这个反显里的,其实还包括光标所在的位置的字符(显示没有被反显)

窗口操作:
窗口的指令都是以control+w开始的,松开再按后面的命令(一起按也行,不过指法太晕)
(1)control+w   n    即:new(这是一个指令,不习惯快键,用:new命令模式创建)创建一个新窗口。把当前视窗分隔,变成了2个窗口,新的显示在上方。(多按几次会出更多的窗口)
(2)control+w   s    即:split(命令)开一个新窗口,内容与原来的窗口一样(克隆)
(3)control+w   f     开一个新窗口,并编辑光标所在字为文件名的文件,如果没有提示没找到。
(4)control+w   q    即:q(命令)退出分割出来的窗口,如果没有保存先保存再退出,强制退出:q!
(5)control+w   o    即:only!  当前光标所在窗口为唯一显示窗口,其它窗口隐藏起来。
(6)control+w    j     移到下一个窗口
(7)control+w   K    移到上一个窗口
(8):sp  文件名       新开窗口来编辑这个文件。

2012/2/16

SHELL操作
(1)!外部指令 , 执行外部指令,您的指令需要在PATH内。
(2)!! 执行上一次的指令。
(3)sh(ell)  执行shell,使用exit回来。
     对于vim GUI,有可能会打开一个新的窗口。
(4)r !命令, 会把外部shell命令执行的结果插入到光标所在位置(牛)

常用的配置
"一般的设置方式是:set xxxx(开启功能) set noxxxx(关闭功能)

"设置显示行号  number | nonumber
set number

"设置自动缩排  autoindent | noautoindent
set autoindent
set cindent "写代码时很方便

"语法高亮显示  syntaxon  | syntaxoff
set syntax on

"高亮搜索 hlsearch  | nohlsearch   #就是high light search的意思。
set hlsearch

"自动备份,就是经常看到的相同文件名后面多了一个~号的 backup | nobackup
set nobackup

"设置状态列说明(行号,列号等)  ruler | noruler
set ruler

"设置状态列左下角(显示insert,visual)的信息  showmode  | noshowmode
set showmode

"设置backsapce键的删除功能 backspace=0/1/2 0,1表示只可以删除本次进入insert模式自己键入的,而2则表示在insert模式里任意删除。
set backspace=0

"设置突出显示当前行 cursorline | nocursorline
set nocursorline

"设置>>和<<命令移动时的宽度(常用4/8)
set shiftwidth=4

"设置tab长度,一般是4或8。 tabstop=长度
set tabstop=4

"设置备份时的行为为覆盖
set backupcopy=yes

"设置搜索时忽略大小写  ignorecase  | noignorecase
set ignorecase

"开启新行时使用智能自动缩进 smartindent  | nosmartindent
set smartindent

"设置命令行的行数为1 cmdheight=行数
set cmdheight=1

"高亮显示匹配的括号
set showmatch 

关于乱码:
文件有多种编码,GBK,UTF8,BIG5等,vim处理他们用到三个指令 
(1)set encoding=编码  如:utf-8 ,cp936,gbk,gb2312等。表示以什么编码显示文档。
(2)set fileencoding=编码  表示以什么编码存储文档
(3)set fileencodings=编码,注意多了一个s,表示可以设置多个,这是解码的列表,vim会自动测试,直到解码成功,转换成encoding指令的编码,转换过程有可能需要配置。
测试:
打开1.xml乱码,原因是1.xml是utf8,而我的encoding是cp936。
(1)set encoding=utf-8 //解决了乱码
(2)set fileencoding=cp936  w 2.xml //重新保存成cp936格式,打开2.xml不乱码了

关于折叠(简单的)
vim的折叠
折叠是把一些行变成一行显示,用到的时候再打开。
在vim中我们可以这样设置:
:set foldmethod=manual  #设置手工折叠
:3,8fold  #从第三行开始到第八行结束,折叠成一行。

我们可以通过高亮显示(v-mode),选中需要折叠的行,之后zf即可。
我们需要打开折叠,在折叠上面按左右光标移动就行了。

indent方式折叠
set foldmethod=indent
这种方式会自动对大括号中间部分进行折叠。
操作:
在可折叠片{}中。
zc   折叠
zo   展开折叠
zC   对所在范围内所有嵌套的折叠点进行折叠
zO   对所在范围内所有嵌套的折叠点进行展开
0 0
原创粉丝点击